在不同的控制器中更改可变参数
问题描述:
我有两个型号的导轨,购买和一块。每当创建采购,我想设置与该购买相关联的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
似乎是一个实例变量,我不能改变它所代表的实际对象的状态。我如何访问这个实际的对象并改变它的状态?
谢谢。
答
当你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)
你是什么你的意思是*不能改变现状*?有没有错误,有什么样的错误? – spickermann
我看不到“piece.save” – emrahbasman