改变不同控制器中的变量参数

时间:2016-07-28 19:45:55

标签: ruby-on-rails ruby

我有两个型号的导轨,一个购买和一件。每当创建购买时,我想将与该购买相关联的作品的状态设置为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似乎是一个实例变量,我无法更改它所代表的实际对象的状态。如何访问此实际对象并更改其状态?

感谢。

3 个答案:

答案 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)