在不同的控制器中更改可变参数

在不同的控制器中更改可变参数

问题描述:

我有两个型号的导轨,购买和一块。每当创建采购,我想设置与该购买相关联的3片的状态这里是我的代码现在:在不同的控制器中更改可变参数

在我购买的控制器:

piece = Piece.find(params[:piece_id]) 
# This works, as when the purchase is created in my view, it passes the piece_id as a hidden field. 

Purchase.create(
    parameter_1 = blah, 
    parameter_2 = blah, 
    piece_id = piece.id 
) 
#This also works 

piece.status = 3 

最后一行是我遇到了麻烦。 piece似乎是一个实例变量,我不能改变它所代表的实际对象的状态。我如何访问这个实际的对象并改变它的状态?

谢谢。

+0

你是什么你的意思是*不能改变现状*?有没有错误,有什么样的错误? – spickermann

+0

我看不到“piece.save” – emrahbasman

当你piece.status = 3,在你piece局部变量的对象获得的价值,但实际上为了持续的变化,你必须保存对象:

piece.status = 3 
piece.save! 

如果你assing这一点,将是如果你在模型中创建一个方法,效果会更好。

例如:

def default_value 
    @piece.status = 3 #or @piece = piece.status = 3 
    @piece.save! #or piece.save! 
end 

然后,您可以用before_action

称之为控制器我认为这是一个更好的办法,因为你与数据库进行交互,并会帮助你保持你的控制器不要沉重。

在你创建方法

def create 
    @purchase = Purchase.new(purchase_params) 

    respond_to do |format| 
    if @purchase.save 
     @piece = Piece.where(purchase: @purchase) 
     @piece.update_attributes(status: 3)