1

我正在处理 after_save 回调的问题。我确信有一个简单的解决方案,但我无法弄清楚。

我有 3 个模型:用户、产品、投标。Product 表包含一个布尔字段“available”,默认设置为true。如果用户出价,则可用字段应设置为 false。我认为这应该与出价模型的回调一起使用。我可以通过键入以下内容访问并设置控制台中的可用字段: b = Bid.last b.product.available = false => false 但是我无法通过控制器更改它,所以我认为它不会执行回调. 我究竟做错了什么?感谢大家的帮助!

产品.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 回答