1

finder SQLを使用せずにこれを行うための「適切な」Rails(3.1)方法があるのだろうかと思います。結合テーブルの条件に基づいてモデルレコードを結合するFetch Rails

私はSTIの階層を持っている:外部キーが

をparty_idとrelated_pa​​rty_idで

class Party 
class Person < Party 
class Organisation < Party 

関係者は、私が行うことができるようにしたい、party_relationshipsテーブルとモデルを介して接合されているが、この次のとおりです。

class Party 
    # Should return all party_relationships where the related_party is a Person 
    has_many :person_relationships 

    # Should return all party_relationships where the related_party is an Organisation 
    has_many :organisation_relationships 
end 

これをRails 3.1で行うにはどうすればよいですか?

答えて

1

解決しました。私は何

@party.party_relationships     # <- returns all relationships 
@party.party_relationships.to_organisations # <- Only those where related_party is an organisation 

...

class Party 
    has_many :party_relationships, foreign_key: :party_id 
end 

class PartyRelationship 
    belongs_to :related_party, :class_name => 'Party' 
    scope :to_organisations, :joins => :related_party, :conditions => {:parties => {:type => 'Organisation' } } 
end 

私はパーティーを持っている場合:これは動作し、私はスコープとの関係は、仕事のやり方に感銘を受け非常にだと言わざるを得ない実際にはのようなものです。もし私が使ったのであれば、has_manyにfinder_sqlを指定すると、SQLはPartyクラスになります。この方法では、物事を適切にカプセル化して、当事者が範囲がどのように実装されているかを知る必要はありません。きちんとした

関連する問題