Help us understand the problem. What is going on with this article?

Railsでjoinsを多段ネストする方法(親から曾孫まで)

More than 5 years have passed since last update.

テーブル構成

class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord:Base
  belongs_to :foo
  has_many :bazs
end

class Baz < ActiveRecord:Base
  belogs_to :bar
  has_many :hoges
end

class Hoge < ActiveRecord:Base
  belogs_to :baz
end

joins

親から辿る場合には

Foo.joins({:bars => {:bazs => :hoges}})

となる。has_manyでのテーブル指定は複数形。

曾孫から辿る場合には

Hoge.joins({:baz => {:bar => :foo}})

となる。belogs_toでのテーブル指定は単数形

where

whereで検索する場合には

Hoge.joins({:baz => {:bar => :foo}}).where('foos.id = 1)

となる。

Hoge.joins({:baz => {:bar => :foo}}).where(:foos => {:id => 1})

という書き方もできる。

whereの中のテーブル指定は複数形。

何が嬉しいの?

active adminのfilterで同じおじいちゃんを持つ曾孫とかで絞り込めるのです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away