私の製品で私のサブスクリプションを更新することはできません。また、製品の属性をサブスクリプションテーブルと同じフィールドに複製することもできません。親を編集した後、親カラムの属性との関連付けを更新しますか?
私の団体があり、subscriptions
とproducts
はUser
に属しているが、Product
は、多くのsubscriptions
を持っています。
Subscription.rb
class Subscription
belongs_to :subscriber, :class_name => "User"
belongs_to :subscribable, :polymorphic => true
end
Product.rb
class Product
belongs_to :user
has_many :subscriptions, :as => :subscribable, :dependent => :destroy
end
User.rb
class User
has_many :products, :dependent => :destroy
has_many :subscriptions, :foreign_key => :subscriber_id, :dependent => :destroy
end
そして私は複製しようとしている同じ列を持つと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
ProductsController
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
ProductObserver after_update
が行うことに仮定される何
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
is:
- チェックは、特定の製品のサブスクリプションが存在する場合、それがない場合は....
- 更新現在のユーザーは、製品の新しい編集した属性とサブスクリプション。
現時点では、サブスクリプションは更新されません。これを行うためにこのコードについて修正する必要があるのは何ですか?プロダクトフィールドをサブスクリプションに複製するとどうなりますか?
私は 'Product'モデルにそれを入れても何も起こりませんでした。 'has_manyサブスクリプション、:autosave => true' – LearningRoR