ruby on rails使用where子句获取activerecords

时间:2011-06-03 03:57:31

标签: ruby-on-rails activerecord model has-many

我有一个简单的问题 - 基本上我想获取某些型号X的所有ActiveRecords,它们符合某些条件。我试图在这里使用X.where方法,但我不确定它是如何工作的。基本上,我的模型X has_many Y。

我有一个模型Y对象的ID列表。我想找到所有的模型X,其中has_many Y中至少有一个id。

使用X.where有一种简单的方法吗?或者我需要更复杂的SQL?

1 个答案:

答案 0 :(得分:0)

以下是我要做的事情:

Modelx.joins(:modelys).where(:modelys => { :id => list_of_ids }).all 

我更喜欢的另一种解决方案是使用范围:

def Modelx < ActiveRecord::Base
  has_many :modelys
  has_many :modelzs

  scope :has_modely_ids, lambda { |ids| joins(:modelys).where(:modelys => { :id => [*ids] }) }
  scope :has_modelz_ids, lambda { |ids| joins(:modelzs).where(:modelzs => { :id => [*ids] }) }

end

然后你可以做类似的事情:

Modelx.has_modely_ids(y_ids).all
Modelx.has_modelz_ids(z_ids).all

modelx_with_ys = Modelx.has_modely_ids(y_ids)
modelx_with_zs = Modelz.has_modely_ids(y_ids)

或链接:(当你真正想要运行查询时,只记得调用所有内容)

modelx_with_y_and_zs = Modelx.has_modely_ids(y_ids).has_modelz_ids(z_ids)
modelx_with_y_and_zs = modelx_with_ys.has_modelz_ids(z_ids)