relationテーブルの条件でthrough先を抽出
ユーザーがイベントに参加する状況を考えているような、以下の3つのテーブルがあるとする。
approvedはユーザーがイベントに参加することを承認されているかがboolで持っている。
この時にイベントごとに承認済みユーザー、未承認ユーザーを抽出したい。
whereで以下のように条件を指定してしまうと、抽出後のusersでapprovedの条件を評価してしまい、カラムが存在しないというエラーになってしまう。
event_error.rb
has_many :approved_users, -> { where approved: true }, through: :relations, source: :user
解決策
以下のようにワンクッション挟むことで解決。
event.rb
has_many :approved, -> { where approved: true }, class_name: "Relation"
has_many :unapproved, -> { where approved: false }, class_name: "Relation"
has_many :approved_users, through: :approved, source: :user
has_many :unapproved_users, through: :unapproved, source: :user