以下の内容はhttps://blog.willnet.in/entry/2012/08/25/201813より取得しました。


ActiveRecord::QueryMethods#joins のメモ

Ruby on Rails Guides: Active Record Query Interface の joins の章を見てメモったので載せておきます。

11 Joining Tables

joins メソッドについて。

11.1 Using a String SQL Fragment

単純に JOIN 節の生 SQL を引数として書ける

Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id')

上記のメソッドの結果は下記のようになる

SELECT clients.* FROM clients LEFT OUTER JOIN addresses ON addresses.client_id = clients.id

11.2 Using Array/Hash of Named Associations

INNER JOIN のみ対応。定義している関連の名前で joins メソッドが使える。

通常パターン

Category.joins(:posts)

複数JOIN

Post.joins(:category, :comments)
  • post と category
  • post と comments

で join

ネスト

Post.joins(:comments => :guest)
  • post と comments
  • comments と guest

で join

混合

Category.joins(:posts => [{:comments => :guest}, :tags])
  • category と posts
  • posts と comments
  • comments と guest
  • posts と tags

で join

11.3 Specifying Conditions on the Joined Tables

JOIN しても普通に where でクエリの条件書ける。

time_range = (Time.now.midnight - 1.day)..Time.now.midnight
Client.joins(:orders).where('orders.created_at' => time_range)
time_range = (Time.now.midnight - 1.day)..Time.now.midnight
Client.joins(:orders).where(:orders => {:created_at => time_range})

上記のコードは BETWEEN を使って、昨日作られた Order を持つ Client を返す。この時 Client に対応する Order が複数存在する場合は、対応する Order 個数分の Client が返ることになる。




以上の内容はhttps://blog.willnet.in/entry/2012/08/25/201813より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14