我有两个型号的导轨,一个购买和一件。每当创建购买时,我想将与该购买相关联的作品的状态设置为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 :(得分:1)
执行piece.status = 3
时,piece
局部变量中的对象获取值,但为了实际保留更改,您必须保存对象:
piece.status = 3
piece.save!
答案 1 :(得分:0)
如果你愿意这样做,如果你在你的模型中创建一个方法会更好。
例如:
def default_value
@piece.status = 3 #or @piece = piece.status = 3
@piece.save! #or piece.save!
end
然后,您可以使用before_action
我认为这是一种更好的方法,因为您正在与数据库进行交互,并且可以帮助您保持控制器不会过重。
答案 2 :(得分:0)
在您的创建方法
中def create
@purchase = Purchase.new(purchase_params)
respond_to do |format|
if @purchase.save
@piece = Piece.where(purchase: @purchase)
@piece.update_attributes(status: 3)