Я думаю, что has_and_belongs_to_many
используется сообществом RoR все реже и реже. Хотя все еще поддерживается, я думаю, что теперь более распространено иметь промежуточную модель (в вашем случае что-то вроде PoliticianMatter
), чтобы присоединиться к вашим Politician
и Matter
моделям.
Тогда у вашего politician_matter
стола будет PK, politician_id
и matter_id
.
Тогда у вас есть
class PoliticanMatter < ActiveRecord::Base
belongs_to :politician
belongs_to :matter
end
Преимущество этого подхода состоит в том, что если когда-либо понадобятся будущие свойства отношения политик -> материя (например, важность, дата последнего появления), то у вас есть модель, которая дает это - has_and_belongs_to_many
не будет поддерживать добавление из этих дополнительных свойств.
Вы также можете получить доступ ко многим ко многим прямо из моделей Политик и Материя, как это
class Politician < ActiveRecord::Base
has_many :politician_matters
has_many :matters, :through => :politician_matters
end
class Matter < ActiveRecord::Base
has_many :politician_matters
has_many :politicians, :through => :politician_matters
end