Вероятно, гораздо лучше использовать has_many
с опцией :through
, чем has_and_belongs_to_many
, потому что он более гибкий и позволяет избежать осложнений этого разнообразия.
Основное различие между ними заключается в том, что *Версия 1006 * имеет столбец первичного ключа id
, поэтому записи являются адресуемыми, и это первоклассная модель, поэтому легко обновлять атрибуты.
Вот пример определения:
class Household < ActiveRecord::Base
has_many :household_appliances
has_many :appliances, :through => :household_appliances
end
class HouseholdAppliance < ActiveRecord::Base
belongs_to :household
belongs_to :appliance
end
class Appliance < ActiveRecord::Base
has_many :household_appliances
has_many :households, :through => :household_appliances
end
Вставить в эту структуру легко и идентично способу has_and_belongs_to_many
:
household = Household.first
household.appliances << appliance
household.appliances.count
# => 1
Вам не нужно сохранять такие отношения, как это делается автоматически для вас.Всегда проверяйте вывод в log/development.log
, чтобы убедиться, что операторы INSERT
представляют записи, которые должны быть созданы.