1

У меня есть модель User и Document, у которой есть tag_lists (from act_as_taggable)Rails: Как я могу получить записи, где дочерний элемент включает любой другой массив?

Я хочу найти Документы, которые имеют какие-либо теги у определенного пользователя. Так, например,

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.

Очевидно, что синтаксис неверен, но вы получаете идею. Как я могу сделать это эффективно?

------- обновление

Просто FYI, то tag_list не является прямым признаком либо пользователя или модели документа, но в активной записи отношения с acts_as_taggable перл: как бы я назвать это в . где оператор?

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"]] 
=> [] 

ответ

0

Это может помочь вам:

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

Спасибо за ответ! Что, если tag_list не был атрибутом внутри документа, но был скорее отношением? Я использую act_as_taggable, и я считаю, что это ассоциация – kibaekr

+0

Ну! это просто вопрос доступа к tag_list. Если вы можете получить доступ к тегу tag_list документа (d), используя d.tag_list, то вы можете иметь: Document.select {| d | (d.tag_list - ["all-users", user.tag_list] .flatten) .size! = tag_list.size). – Mehran

+0

The .select отлично работает, но превращает его в массив, а не активную запись? Так что я бы не смог добавить .includes (: child_association) к этому запросу? Как я могу сделать возвращение активной записью? – kibaekr