Rails: добавление новых ассоциаций has_and_belongs_to_many без создания объектов? - PullRequest
1 голос
/ 11 апреля 2011

Можно ли просто добавить новые ассоциации?

У меня есть два объекта, связанных вместе через has_and_belongs_to_many. Модель A всегда будет уникальной, но соответствующие объекты Модель B могут уже находиться в базе данных.

Когда создается Модель A , как мнепопросите Rails найти соответствующие объекты Model B и связать две модели вместе - или - если соответствующего объекта Model B не существует, тогда приступайте к его созданию?Должен ли я выполнить поиск .where, а затем запрос SQL, чтобы добавить два идентификатора в таблицу соединений, или для этого есть собственный метод ActiveRecord?

Ответы [ 2 ]

2 голосов
/ 09 мая 2011
# the piece from create action of ProductsController
categories = Array.new(@product.categories)
@product.categories.clear
categories.each do |c|
  @product.categories << Category.find_or_create_by_name(c.name)
end
# ready to @product.save
1 голос
/ 11 апреля 2011

Ассоциация Rails не связывает модели ограниченным образом.Предположим, что у вас есть модель User и Post.Ассоциация User has_many Posts просто создает интерфейс.Используя этот интерфейс, вы можете теперь:

user.posts

, и это вернет все сообщения пользователя.Если вы хотите добавить или найти сообщение, вы можете выполнить:

Post.find_or_create_by_user_id(...)

Это либо найдет сообщение, либо создаст его.

Кроме того, в вашем примере вы упоминаете одно длямного ассоциаций.Таким образом, вам не нужно иметь и принадлежит ко многим ассоциациям, но есть has_many / serve_to.

...