簡體   English   中英

Rails:我將如何檢索子元素包括另一個數組中的任何元素的記錄?

[英]Rails: How would I retrieve records where child element includes any of another array?

我有一個用戶和文檔模型,都具有tag_lists(來自acts_as_taggable)

我想查找具有某個用戶具有的任何標簽的文檔。 例如

user.tag_list = ["ceo" , "sales"]
documentA.tag_list = ["ceo"] 
documentB.tag_list = ["all-users'] 
documentC.tag_list = ["sales", "marketing"] 
documentD.tag_list = ["marketing"]

我想做類似的事情

Document.where(tag_list.includes_any?("all-users" || user.tag_list))
->將檢索文檔A,B,C。

顯然語法是錯誤的,但是您可以理解。 我將如何有效地做到這一點?

-------更新

只是,tag_list既不是User模型也不是User模型的直接屬性,而是來自acts_as_taggable gem的活動記錄關系:如何在.where運算符中調用它?

2.1.1 :036 > Document.last.tag_list
  Document Load (3.7ms)  SELECT  "assignable_objects".* FROM "assignable_objects"  WHERE "assignable_objects"."type" IN ('Document')  ORDER BY "assignable_objects"."id" DESC LIMIT 1
  ActsAsTaggableOn::Tag Load (3.5ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL)  [["taggable_id", 52], ["taggable_type", "AssignableObject"]]
 => []

這可能對您有幫助:

    Document.where((tag_list-["all-users", user.tag_list].flatten).size != tag_list.size)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM