次のようなモデルの例を考えます。
class Foo < ActiveRecord::Base
belongs_to :bar
end
class Bar < ActiveRecord::Base
has_many :foos
belongs_to :baz
end
class Baz < ActiveRecord::Base
has_many :bars
belongs_to :qux
end
class Qux < ActiveRecord::Base
resourcify
has_many :bazzes
end
次のコードは期待どおりに機能します。
records = Foo.joins(bar: { baz: :qux }).merge(Qux.where(x: 17))
でも
records = Foo.joins(bar: { baz: :qux }).merge(Qux.with_role(:admin))
Foo
テーブルの値が入力されたレコードのコレクションを返しquxxes
ます。これは、たとえば列がオンであるrecords.z
がオンではない場合、欠落属性エラーが発生することを意味します。これを次の方法でほぼ修正できます。z
foos
quxxes
records = Foo.select('foos.*').joins(bar: { baz: :qux }).merge(Qux.with_role(:admin))
quxxes
しかし、これは、からfoos
ではなく、同じ名前を持つ列から値を取得するためid
、欺瞞created_at
的updated_at
ですquxxes
。