Ruby on rails RubyonRails4过滤包括模型

Ruby on rails RubyonRails4过滤包括模型,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我是Rails新手,我正在尝试做一些查询,但失败了。我有两个ActiveRecord::Base,如下所示: class A < ActiveRecord::Base has_many :bs end class A

我是Rails新手,我正在尝试做一些查询,但失败了。我有两个ActiveRecord::Base,如下所示:

class A < ActiveRecord::Base
  has_many :bs
end
class A

B类
我想显示A中的每一行。在这些行中,B中的每一行(与A相关),其中B有一些任意日期(作为参数传递)

我已经尝试过使用scope、join、includes、merges,但似乎没有任何效果。 我想要所有的A,A.B只返回那个特定日期的B。 在许多情况下,A没有特定日期的Bs,即使如此,我还是希望A返回,A.Bs为空

可能吗


谢谢

您可以使用
.includes
执行
左外部联接
,该联接包括a(左)中的记录,即使B(右)中没有匹配项


您可以使用
.includes
执行
左外部联接
,该联接包括a(左)中的记录,即使B(右)中没有匹配项


请注意,即使您使用
。all
或其他一些选项来获取A,也同样适用。它不起作用。结果是该日期具有Bs的As列表。我想要所有的,如果他们在那个日期有或没有Bs@如果到期日中没有Bs,则a为空。请尝试在rails控制台中运行查询并检查生成的SQL。您的代码生成SQL:SELECT*FROM as LEFT EXTER JOIN Bs ON Bs.a_id=a.id,其中b.due_date=2016-01-25。我想要的是:SELECT*FROM as LEFT EXTER JOIN Bs ON Bs.a_id=a.id和b.due_date=2016-01-25,我不需要where,我想向ON添加一个条件。请注意,即使使用
.all
或其他一些选项来获取a,也同样适用。它不起作用。结果是该日期具有Bs的As列表。我想要所有的,如果他们在那个日期有或没有Bs@如果到期日中没有Bs,则a为空。请尝试在rails控制台中运行查询并检查生成的SQL。您的代码生成SQL:SELECT*FROM as LEFT EXTER JOIN Bs ON Bs.a_id=a.id,其中b.due_date=2016-01-25。我想要的是:SELECT*FROM as LEFT EXTER JOIN Bs ON Bs.a_id=a.id和b.due_date=2016-01-25,我不想要一个where,我想给ON添加一个条件。
class B < ActiveRecord::Base
  belongs_to :a
end
@a = A.includes(:bs).where(bs: { due_at: Date.yesterday }).find(params[:id])
@bs = @a.bs # will use the eager loaded collection