Добавьте запись на 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

У меня также есть promotions_users таблица/модель без собственного идентификатора. Это ссылается на user_id и promotions_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>

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

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

TypeError: can't dup Fixnum

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

25
задан idmean 6 September 2015 в 09:02
поделиться

3 ответа

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

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

См. apidock , чтобы узнать обо всех доступных вам функциях.

46
ответ дан 28 November 2019 в 18:19
поделиться

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

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

или

User.promotions << promotion

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

9
ответ дан 28 November 2019 в 18:19
поделиться

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

User.promotion.build(attr = {})

, поэтому объект продвижения сохраняется, когда вы сохраняете объект пользователя.

И это

User.promotion.create(attr = {})

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

9
ответ дан 28 November 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: