我无法使用我的产品更新我的订阅,也无法将产品的属性复制到与我的订阅表相同的字段中。
我的联想是,subscriptions
属于products
一个User
,但一个Product
有很多subscriptions
。
订阅.rb
class Subscription
belongs_to :subscriber, :class_name => "User"
belongs_to :subscribable, :polymorphic => true
end
产品.rb
class Product
belongs_to :user
has_many :subscriptions, :as => :subscribable, :dependent => :destroy
end
用户.rb
class User
has_many :products, :dependent => :destroy
has_many :subscriptions, :foreign_key => :subscriber_id, :dependent => :destroy
end
然后与我试图复制相同列的Product
表Subscription
:
create_table :products do |t|
t.string :name
t.decimal :price
t.integer :user_id
end
create_table :subscriptions do |t|
t.string :name
t.decimal :price
t.integer :subscriber_id # same as user_id
t.integer :subscribable_id
t.string :subscribable_type
end
产品控制器
def edit
@product = Product.find(params[:id])
end
def update
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
redirect_to(@product, :notice => 'Successfully Updated.')
else
render :back
end
end
产品观察员
class ProductObserver < ActiveRecord::Observer
def after_update(product)
if self.subscriptions.find_by_subscribable_id_and_subscribable_type(subscribable_id, subscribable_type)
subscription = Subscription.find_by_subscribable_id_and_subscribable_type(subscribable_id, subscribable_type)
self.subscription.update_attributes(params[:subscription]).select{ |key, _| Subscription.attribute_names.include? key })
end
end
end
应该after_update
做的是:
- 检查特定产品的订阅是否存在,如果存在......
- 使用产品新编辑的属性更新当前用户订阅。
目前,订阅不会在产品更新时更新。我需要对此代码进行什么修复才能使其执行此操作?将产品字段复制到其订阅时会怎样?