ActiveRecord:在模型中更改并保存对象状态

rta*_*oni 3 ruby activerecord ruby-on-rails instance-variables models

我有以下代码:

  def incoming_acceptation(incoming_code)
    if invite_code == incoming_code
      accepted = true
      self.save
      true
    else
      false
    end
  end
Run Code Online (Sandbox Code Playgroud)

但它没有改变并保存接受为真,它仍然处于以前的状态,是假的.

@i.incoming_acceptation(incoming_code) => true
@i.accepted => false
Run Code Online (Sandbox Code Playgroud)

Ari*_*jan 6

我建议:

def incoming_acceptation(incoming_code)
  update_attribute(:accepted, true) if invite_code == incoming_code
end
Run Code Online (Sandbox Code Playgroud)

update_attribute将更改并保存该属性.还有update_attributes(注意s)接受Hash一次更改多个属性:

@obj.update_attributes(:accepted => true, :accepted_at => Time.now)
Run Code Online (Sandbox Code Playgroud)

注意:当更改和保存成功时update_attribute,update_attributes两者都会返回true,就像在您的示例中一样.