私は次の団体や私のオブザーバーでのアクションがあります。別のモデルの属性を正しくコピーできません。
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
上記のコードは、成功しuser_id
とproduct_id
が、:watched_name
と:watched_price
元Product
:price
と:name
で満たされていないとProductSubscription
を作成します。
私は問題がこれにあることに気付きました。
WARNING: Can't mass-assign protected attributes: product_id
今、私は離れてのではないProduct
モデルで離れている他のフィールドを持っています:私は、データベースに見たとき、私は上記のように、それが割り当てられているため何の意味も持ちませんProductSubscription
モデルなので、そんなことが起こったのだろうか?
私はproduct_id
を大量割り当て可能にしたくありません。どうすればこの問題を修正できますか?
なぜProductSubscriptionに最初にProductの属性の重複があるのですか? –
@AndrewMarshall私はProductSubscriptionを使用して、最初に製品の属性をコピーし、次にコピーされた属性を他の同様の製品と比較することにより、より安い価格で「監視」します。 – LearningRoR