获取模型的所有记录,其中关联不为空且关联满足特定条件

时间:2012-11-01 02:31:49

标签: ruby-on-rails activerecord arel

我正在使用Rails 3.1.0

我有两个型号,A和B. 一个has_one B,但B可以为null。 B belongs_to A. B有一个名为“visible”的布尔字段。

我希望获得所有具有非空B和B且“可见”设置为true的B记录。

执行此查询的简洁有效方法是什么?

到目前为止我做了什么:

我创建了一个范围,可以获得具有非空B的A(我认为)。

范围:has_b,包括(:b).where(B.arel_table [:id] .not_eq(nil))

有没有办法将visible == true条件链接到此范围?

2 个答案:

答案 0 :(得分:2)

A.includes(:bs).where(:bs => { :visible => true })

扎克坎普几乎是对的

所以,范围:

scope as_with_visible_bs includes(:bs)
  .where(B.arel_table[:id].not_eq(nil))
  .where(:bs => { :visible => true })

答案 1 :(得分:0)

查看“加入”部分here。此查询应该满足您的需求:

A.joins(:bs).where(:bs => { :visible => true })