0

Rails 3.1.0 を使用しています

A と B の 2 つのモデルがあります。A には B が 1 つ含まれていますが、B は null になる可能性があります。B は A に属します。B には「visible」というブール フィールドがあります。

null 以外の B と「可視」が true に設定された B を持つすべての A レコードを取得したいと考えています。

このクエリを実行する簡潔で効率的な方法は何ですか?

私がこれまでに行ったこと:

null 以外の B で A を取得するスコープを作成しました (と思います)。

スコープ :has_b, includes(:b).where(B.arel_table[:id].not_eq(nil))

visible == true 条件をこのスコープにチェーンする方法はありますか?

4

2 に答える 2

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 })
于 2012-11-01T04:15:46.557 に答える
0

こちらの「結合」セクションをご覧ください。このクエリは、必要なことを行う必要があります。

A.joins(:bs).where(:bs => { :visible => true })
于 2012-11-01T02:57:50.837 に答える