Подтвердить что ты не робот

Добавить запись в отношение has_and_belongs_to_many

У меня есть две модели, пользователи и рекламные акции. Идея состоит в том, что продвижение может иметь много пользователей, и у пользователя может быть много рекламных акций.

class User < ActiveRecord::Base
  has_and_belongs_to_many :promotions
end

class Promotion < ActiveRecord::Base
  has_and_belongs_to_many :users
end

У меня также есть таблица/модель promotionions_users, без собственного идентификатора. Он ссылается на user_id и promotionions_id

class PromotionsUsers < ActiveRecord::Base
end

Итак, как добавить пользователя в продвижение? Я пробовал что-то вроде этого:

user = User.find(params[:id])
promotion = Promotion.find(params[:promo_id])
promo = user.promotions.new(promo)

Это приводит к следующей ошибке:

NoMethodError: undefined method `stringify_keys!' for #<Promotion:0x10514d420>

Если я попробую эту строку вместо: promo = user.promotions.new(promo.id)

Я получаю эту ошибку:

TypeError: can't dup Fixnum

Я уверен, что есть очень легкое решение моей проблемы, и я просто не ищу решение правильно.

4b9b3361

Ответ 1

user = User.find(params[:id])
promotion = Promotion.find(params[:promo_id])
user.promotions << promotion

user.promotions - это массив рекламных акций, привязанных к пользователю.

Смотрите apidock для всех доступных функций.

Ответ 2

Вы можете сделать только

User.promotions = promotion #notice that this will delete any existing promotions

или

User.promotions << promotion

Вы можете прочитать о has_and_belongs_to_many отношениях здесь.

Ответ 3

Это также полезно

User.promotion.build(attr = {})

поэтому объект сохранения сохраняется при сохранении объекта User.

И это

User.promotion.create(attr = {})

создать продвижение, вам не нужно его сохранять или модель пользователя