1

after_save コールバックの問題に対処しています。簡単な解決策があると確信していますが、わかりません。

ユーザー、製品、入札の 3 つのモデルがあります。Product テーブルには、デフォルトで true に設定されているブール フィールド「available」が含まれています。ユーザーが入札した場合、利用可能なフィールドは false に設定する必要があります。これは、入札モデルのコールバックで機能するはずだと思いました。次のように入力して、コンソールの利用可能なフィールドにアクセスして設定できます。 b = Bid.last b.product.available = false => false ただし、コントローラー経由で変更できないため、コールバックを実行しないと思います. 私は何を間違っていますか?ご協力ありがとうございました!

product.rb

class Product < ActiveRecord::Base

has_one :bid
belongs_to :user
end

入札.rb

class Bid < ActiveRecord::Base
attr_accessible :product_id, :user_id, :product
belongs_to :product
belongs_to :user
after_save :set_product_status

def set_product_status
self.product.available = false
end
end

bids_controller.rb

...
def create
@user = current_user
product = Product.find(params[:product_id])
@bid = @user.bids.build(product: product)

respond_to do |format|
if @bid.save
...
4

1 に答える 1

0

入札は商品に属しているため、商品も保存する必要があります。

def set_product_status
  self.product.available = false
  self.product.save
end
于 2012-08-10T13:20:29.320 に答える