次のようなモデルの例を考えます。
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がオンではない場合、欠落属性エラーが発生することを意味します。これを次の方法でほぼ修正できます。zfoosquxxes
records = Foo.select('foos.*').joins(bar: { baz: :qux }).merge(Qux.with_role(:admin))
quxxesしかし、これは、からfoosではなく、同じ名前を持つ列から値を取得するためid、欺瞞created_at的updated_atですquxxes。