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