帮助Rails find_by查询

时间:2009-04-12 08:19:41

标签: sql ruby-on-rails

假设@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

2 个答案:

答案 0 :(得分:2)

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

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

这将创建一个SQL查询,其条件如下:

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

其中整数是@news_writers的ID。

答案 1 :(得分:1)

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

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

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