【问题标题】:Rails: How would I retrieve records where child element includes any of another array?Rails:如何检索子元素包含任何另一个数组的记录?
【发布时间】:2014-10-27 07:29:02
【问题描述】:

我有一个用户和文档模型,它们都有 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 不是用户或文档模型的直接属性,而是来自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"]]
 => []

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 activerecord acts-as-taggable


    【解决方案1】:

    这可能会对您有所帮助:

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

    【讨论】:

    • 感谢您的回答!如果 tag_list 不是 Document 中的一个属性,而更像是一个关系呢?我正在使用 act_as_taggable,我相信这是一个关联
    • 好吧!这只是您如何访问 tag_list 的问题。如果您可以使用 d.tag_list 访问文档 (d) 的 tag_list,那么您可以拥有: Document.select{|d| (d.tag_list-["all-users", user.tag_list].flatten).size != tag_list.size)。
    • .select 效果很好,但这会将它变成一个数组,而不是活动记录,对吧?所以我不能将 .includes(:child_association) 附加到该查询?我怎样才能使退货成为有效记录?
    猜你喜欢
    • 2022-01-09
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2020-03-10
    • 2021-06-04
    相关资源
    最近更新 更多