他の3つの関係を組み合わせた関係を作成しようとしています。最初の3つはすべて同じクラスです。コングロマリットが欲しいのですが、それを行うための優れた「アレル」方法が見つかりません。
これが私がやろうとしていることの例です。
動作するSQLクエリは
SELECT `records`.* FROM `records` INNER JOIN `memberships` ON `records`.`subject_membership_id` = `memberships`.`id` OR `records`.`recorder_membership_id` = `memberships`.`id` OR `records`.`subject_membership_id` = `memberships`.`id` WHERE `memberships`.`group_id` = 4
もちろん、私はそれをレールのようにやりたいと思っています。これが私がこれまでに持っているものです。かなり自明のはずなので、これ以上説明するのに時間を無駄にしません。
class Group < ActiveRecord::Base
has_many :recorded_records, :through => :memberships, :source => :recorded_records, :class_name => "Record"
has_many :reported_records, :through => :memberships, :source => :reported_records, :class_name => "Record"
has_many :reviewed_records, :through => :memberships, :source => :reviewed_records, :class_name => "Record"
#has_many :records through recorded_records, reported_records, reviewed_records??
# Psuedo code above... Wondering how best to do this. I've tried...
def records
recorded_records | reported_records | reviewed_records
end
# But that makes three seperate database queries when what I really want is...
# SELECT `records`.* FROM `records` INNER JOIN `memberships` ON `records`.`subject_membership_id` = `memberships`.`id` OR `records`.`recorder_membership_id` = `memberships`.`id` OR `records`.`subject_membership_id` = `memberships`.`id` WHERE `memberships`.`group_id` = 4
end
あなたたち最高!ありがとう :)