ここでやるべきことはヘルパー関数を作成することです適切な場において。私はあなたの連鎖の始まりが何であるかはっきりしていませんが、event_role.event
を返すメソッド#event
を割り当てると思います。そこから、event
は#boss_role
を持っている、または何が意味的に理にかなって、その方法は
event_roles.joins(:mission_role).where(:mission_roles => {:title => 'Boss'}).first
最後に、またEvent
モデルに、そう
boss_roles.first.person_event_roles.first.person
を取得#boss
方法、ありますあり、元のクエリは
@person_event_role.event.boss
になります。チェーンの各脚は自己完結型で、アンダーされやすいそれはあなたのチェーンの始まりを全面的に知る必要はありません。私はこれらの団体の完全な理解を完全に理解していませんが、それを3つまたは4つのモデル方法に分解するだけで、あなたが探している心配事をきちんと読んで分離することができます。読書をさらに容易にするためにそれをさらに分解するかもしれませんが、それはスタイルの問題になります。
希望に役立ちます!モデルがある...作品
@person_event_role.get_related_event_roles_for('Boss').first.filled_by.first
#person_event_role:
def get_related_event_roles_for(role)
event.event_roles_for(role)
end
def event
event_role.event
end
#event:
def event_roles_for(role)
event_roles.for_role(role)
end
#event_role:
scope :for_role, lambda {|role| joins(:mission_role).where(:mission_roles => {:title => role})}
def filled_by
person_event_roles.collect {|per| per.person}
end
が、それは多くの相互作用のひとつだ:以下
は、私はこのアドバイスに従い、になってしまったと考え、元の質問者
でありますこれらのトンでいっぱいになる... – DGM