Rails first_or_initialize不更新记录

时间:2014-09-15 05:55:06

标签: ruby ruby-on-rails-4 sql-update persistence

我正在使用以下代码创建新记录或更新现有记录。创建正在工作,更新不是。

Signup.find_or_initialize_by(email: "text@example.com") do |signup|
  signup.name = "John Doe"
  signup.save
end
#Signup.find(email: "test@example.com").name = nil

不确定为什么save也会更新记录。 FWIW,我在下面尝试了不同的语法,但确定不同,但我想保留find_or_initialize块版本。

signup = Signup.find_or_initialize_by(email: "text@example.com")
signup.name = "John Doe"
signup.save
#Signup.find(email: "test@example.com").name = "John Doe"

1 个答案:

答案 0 :(得分:3)

只有在数据库中找不到匹配的行时才会调用该块:您的第一个版本永远不会修改具有请求的电子邮件地址的现有行。

如果你想做什么,你的第二个例子是要走的路。