У меня есть две модели, пользователи и продвижения. Идея состоит в том, что продвижение может иметь многих пользователей, и у пользователя может быть много продвижений.
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
Я уверен, что существует очень легкое решение моей проблемы, и я просто не ищу решение правильный путь.
user = User.find(params[:id])
promotion = Promotion.find(params[:promo_id])
user.promotions << promotion
user.promotions
- это массив рекламных акций, привязанных к пользователю.
См. apidock , чтобы узнать обо всех доступных вам функциях.
Вы можете сделать только
User.promotions = promotion #notice that this will delete any existing promotions
или
User.promotions << promotion
. Вы можете прочитать об отношениях has_and_belongs_to_many
здесь .
Это также полезно
User.promotion.build(attr = {})
, поэтому объект продвижения сохраняется, когда вы сохраняете объект пользователя.
И это
User.promotion.create(attr = {})
создать продвижение, вам не нужно его сохранять, или модель пользователя