Я не уверен, почему так много людей используют has_and_belongs_to_many
, который является пережитком Rails 1, вместо использования has_many ..., :through
, за исключением того, что это, вероятно, во многих старых справочниках и руководствах.Большая разница между этими двумя подходами заключается в том, что первый использует составной ключ для их идентификации, второй - модель первого класса.
Если вы переопределите свои отношения, вы сможете управлять на уровне промежуточной модели.Например, вы можете добавлять и удалять BookAuthor
записей вместо has_and_belongs_to_many
ссылок, которые, как известно, трудно настроить индивидуально.
Вы можете создать простую модель:
class BookAuthor < ActiveRecord::Base
belongs_to :book
belongs_to :author
end
Каждая из ваших других моделей теперь более легко связана:
class Book < ActiveRecord::Base
has_many :book_authors
has_many :authors, :through => :book_authors
end
class Author < ActiveRecord::Base
has_many :book_authors
has_many :books, :through => :book_authors
end
В вашей вложенной форме напрямую управляйте отношением book_authors
, добавляя и удаляя их по мере необходимости.