Извлечение Rails объединяет записи модели на основе условия в объединенной таблице - PullRequest
1 голос
/ 18 февраля 2012

Мне интересно, есть ли "правильный" Rails (3.1) способ сделать это, не используя только искатель 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

Как лучше всего это сделать в Rails3,1

1 Ответ

1 голос
/ 18 февраля 2012

Решил это. Это работает, и я должен сказать, что я очень впечатлен тем, как работают области и отношения:

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

Что мне действительно нравится в этом, так это то, что если бы я использовал: finder_sql в has_many, тогда SQL был бы в классе Party. Таким образом, все вещи должным образом инкапсулируются, так что Сторона не должна знать, как реализуется сфера применения. Ухоженная.

...