如何在不使用不同变量名的情况下更新rails模型中实例方法中的属性?

Dav*_*off 7 ruby ruby-on-rails ruby-on-rails-3

我想在rails中的实例方法中更新属性,而不必强制更改传入的参数,以便我可以利用rails自动属性.这是一个例子.

理想:

status = "some_new_status"
person.update(status)

class Person < ActiveRecord::Base
  def update(status)
    self.status = status
  end
end
Run Code Online (Sandbox Code Playgroud)

我现在要做的是:

class Person < ActiveRecord::Base
  def update(new_status)
    self.status = new_status
    self.save
  end
end
Run Code Online (Sandbox Code Playgroud)

我理解在这个例子中没什么关系.但是当我有复杂的更新方法时,如果我可以消除一些代码,那将会更加清晰.

apn*_*ing 20

你应该使用builtin Rails方法:

@person.update_attribute(:status, "Some Value") #no callback triggered nor validation

@person.update_attributes(:status => "Some Value") #can pass multiple values
Run Code Online (Sandbox Code Playgroud)

或者保持简短的语法

def update(status)
  update_attribute(:status, status)
end
Run Code Online (Sandbox Code Playgroud)

Update_attribute doc.

Update_attributes doc.

  • 你需要纠正一下.当你使用update_attributes方法时,你应该这样写::: status =>'active' (3认同)
  • 我觉得作为一个新用户,他可能不会意识到"接受的答案"这样的功能;) (2认同)