为什么我不能直接使用User.last.sign_up_completed保存?

时间:2015-05-25 15:43:23

标签: ruby-on-rails

我写了一个简单的定义

  def sign_up_completed!
    self.sign_up_completed_at = Time.now.utc
  end

在rails控制台中,我尝试User.last.sign_up_completed!

irb(main):004:0> User.last.sign_up_completed!
  User Load (0.7ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."id" DESC LIMIT 1
=> 2015-05-25 15:37:24 UTC

我必须执行以下操作才能保存:

> User.last
> u = _
> u.sign_up_completed!
> u.save

为什么会这样?

1 个答案:

答案 0 :(得分:2)

以这种方式更改属性时,ActiveRecord不会保存。你的功能需要

def sign_up_completed!
  self.sign_up_completed_at = Time.now.utc
  self.save!
end

或者,您可以像这样使用update_attribute,这将自动保存:

def sign_up_completed!
  self.update_attribute :sign_up_completed_at, Time.now.utc
end

或者根本不使用函数,只需在用户模型上调用update_attribute,但这可能不太可读:

user.update_attribute :sign_up_completed_at, Time.now.utc