在我的一个模特中,我正在打电话
puts where(field: value).first
where(field: value).first_or_initialize.tap do |row|
# . . . Actual creation and saving omitted
end
我已经运行了几次只是为了测试它,即使我可以清楚地看到它不应该是(因为puts
正在打印找到的行并且因为有实际上是数据库中的东西)。我也知道正在调用该块,因为我在那里省略了puts
并且SQL正在调用更新。
这是为什么?我该如何解决?
答案 0 :(得分:2)
您需要了解tap
的工作原理。关键在于,tap
基本上,您可以点击对象并在其上操作块。在这种情况下,您根本不需要tap
。这就是你需要的:
Model.where(conditions).first_or_initialize do |row|
# code
end
或多或少,相同的代码,但没有tap
。