Rails 3.2 を使用した私の ActiveRecord モデルは次のとおりです。
class User < ActiveRecord::Base
has_one :criterion
has_many :user_offer_choices
end
class Offer < ActiveRecord::Base
has_many :user_offer_choices
def seen
user_offer_choices.where(seen: true)
end
def accepted
user_offer_choices.where(accepted: true)
end
end
class Criterion < ActiveRecord::Base
belongs_to :user
end
class UserOfferChoice < ActiveRecord::Base
belongs_to :user
belongs_to :offer
end
オファーを見たユーザーのすべての基準を取得したいと考えています。何かのようなもの :
Offer.find(11).seen.users.criterions
しかし、ActiveRecordでそれを行う方法がわかりません
私は次のようなことができることを知っています:
Criterion.joins(user: { user_offer_choices: :offer }).where(user: { user_offer_choices: {accepted: true, offer_id: 11} } )
しかし、私は自分のスコープをオファーで使用できるようにしたい (見た & 受け入れた)。どうすればそれができますか?
編集: 私が探していたもの、Arelのマージ方法を見つけました:http://benhoskin.gs/2012/07/04/arel-merge-a-hidden-gem