У меня есть следующие ассоциации, а затем действие в моем обозревателе:
class Product < ActiveRecord::Base
attr_accessible :price, :name, :watch_price
belongs_to :user
belongs_to :store
has_many :product_subscriptions, :dependent => :destroy
has_many :product_subscribers, :through => :product_subscriptions, :class_name => 'User'
end
class ProductSubscription < ActiveRecord::Base
belongs_to :product
belongs_to :product_subscriber, :class_name => 'User'
attr_accessible :watched_price, :watched_name
end
class ProductObserver < ActiveRecord::Observer
def after_create(product)
ProductSubscription.new(product.attributes.merge({
:watched_name => name,
:watched_price => price,
:store_id => :store_id,
}))
end
end
Приведенный выше код успешно создает ProductSubscription
с user_id
и product_id
, но :watched_name
и :watched_price
не заполнены оригинальными Product
:price
и :name
.
Я заметил, что проблема заключается в этом.Что не имеет никакого смысла, потому что когда я смотрю в базу данных, она присваивается, как я уже упоминал выше:
WARNING: Can't mass-assign protected attributes: product_id
Теперь у меня есть другие поля, которые не относятся к модели Product
, которые не 't кроме модели ProductSubscription
, так что, может быть, из-за этого все испортилось?
Я не хочу, чтобы product_id
можно было назначать по массе.Как я мог это исправить?