2012-08-10 77 views
1

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

我有3个型号:用户,产品,出价。产品表包含布尔字段“available”,该字段默认设置为true。如果用户放置出价,则可用字段应设置为false。 我认为这应该与出价模型的回调一起工作。 我可以访问并通过键入设置在控制台中可用的字段: B = Bid.last b.product.available =假 =>假 但是我不能经由控制器改变它,所以我认为它不不执行回调。我究竟做错了什么? 谢谢大家的帮助!

product.rb

class Product < ActiveRecord::Base 

has_one :bid 
belongs_to :user 
end 

bid.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 
... 

回答

0

由于投标属于_to产品,您应该保存产品。

def set_product_status 
    self.product.available = false 
    self.product.save 
end 
+0

谢谢!这工作! 我发现,它也将与: product.available = false product.save 因此,它似乎也不需要“自我”的参考。 非常感谢您的帮助! – 2012-08-10 13:27:09