【问题标题】:Help with Rails find_by queries帮助 Rails find_by 查询
【发布时间】:2009-04-12 08:19:41
【问题描述】:

假设@news_writers 是一个记录数组。然后,我想使用@news_writers 查找由@news_writers 中包含的所有新闻作者撰写的所有新闻。

所以我想要这样的东西(但这在语法上是不正确的):

@news = News.find_all_by_role_id(@news_writers.id) 

注意

class Role < ActiveRecord::Base
  has_many :news
end

and 

class News < ActiveRecord::Base
  belongs_to :role
end

【问题讨论】:

    标签: sql ruby-on-rails


    【解决方案1】:

    和 ennen 一样,我不确定您的模型应该具有什么样的关系。但一般来说,您可以从给定集合中找到具有列值的所有模型,如下所示:

      News.all(:conditions => {:role_id => @news_writers.map(&:id)})
    

    这将创建一个带有 where 条件的 SQL 查询:

      WHERE role_id IN (1, 10, 13, ...)
    

    其中整数是@news_writers 的ID。

    【讨论】:

      【解决方案2】:

      我不确定我是否理解你 - @news_writers 是角色模型的集合?如果该假设是正确的,那么您的关联似乎是倒退的 - 如果这些代表新闻项目的作者,那么 News belongs_to Role(作为作者)不应该吗?

      无论如何,我认为最直接的方法是在@news_writers 上使用迭代器,依次调用每个news_writer(如news_writer.news)的关联并将其推入单独的变量中。

      编辑:Daniel Lucraft 的建议是比上述更优雅的解决方案。

      【讨论】: