我想知道是否有一种“正确的”Rails(3.1)方法,而不使用finder SQL就可以做到这一点。
我有一个STI层次结构:
class Party
class Person < Party
class Organisation < Party
关联方通过party_relationships表和模型加入,使用外键party_id和related_party_id
我希望能够做到这一点:
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中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
解决了它。这是有效的,我不得不说我对
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
现在如果我参加派对......
@party.party_relationships # <- returns all relationships
@party.party_relationships.to_organisations # <- Only those where related_party is an organisation
我真正喜欢的是,如果我在has_many上使用了:finder_sql,那么SQL将在Party类中。这样可以保持正确封装的内容,以便Party不必知道如何实现范围。整齐。