例如,我改变了Post的对象的值,但没有通过验证:
my_post = Post.last
my_post.name
# => "foobar"
my_post.name = "something wrong"
my_post.save
# => (0.1ms) begin transaction
# => (0.0ms) rollback transaction
# => false
my_post.name
# => "something wrong"
实际值仍然是“foobar”,但是如何在不创建新对象的情况下立即返回呢?
答案 0 :(得分:3)
changes
返回对模型对象所做更改的哈希:
my_post.changes["name"][0] #=> "foobar"
也可以通过动态生成的方法访问:
my_post.name_change[0]
在你的情况下你应该做
my_post.name = my_post.name_was unless my_post.save
ActiveModel::Dirty
的文档中提供了有关此内容的更多信息。