1

创建记录时,我知道您可以使用该方法

.first_or_create!

创建模型中尚不存在的记录。更新模型时我需要做同样的事情。我有一个运行 rake 任务的应用程序,可以将分数应用于模型中的列。

prediction.update_attributes!(score: score)

我只想更新尚未更新的分数。

这可能吗?

谢谢

4

2 回答 2

1

我同意 juanpastas 的观点,即 Rails 只有在实际发生变化时才会保存到数据库中。如果您想在代码中更加明确,为什么不使用“.changed”?标志只保存脏记录?在这里查看更多详细信息。

于 2013-05-20T00:52:31.190 回答
1

我认为您可能正在寻找一种方法,该try方法将尝试调用潜在的对象上的方法nil

例子:

>> prediction.try(:update_attributes!, :score => some_new_score)

如果predictionnil它只会返回nil,而不是抛出一个NoMethodError. 如果prediction是表示现有记录的对象,那么它将调用对象上的方法并更新其score属性。

http://api.rubyonrails.org/classes/Object.html#method-i-try

于 2013-05-19T21:34:15.907 回答