我正在使用以下代码创建新记录或更新现有记录。创建正在工作,更新不是。
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"
答案 0 :(得分:3)
只有在数据库中找不到匹配的行时才会调用该块:您的第一个版本永远不会修改具有请求的电子邮件地址的现有行。
如果你想做什么,你的第二个例子是要走的路。