在Rails应用程序中,我有一个特殊的表单,其中包含许多用于编辑资源的字段。由于我还想记录这个特定资源的更改内容,我需要知道哪些参数更改了。
目前,在此表单中,我已使用隐藏字段标记复制了表单中的每个字段,因此在控制器中,每个字段都与相应的隐藏字段进行比较,以确定值是否已更改。但是在视图和控制器中有很多工作。
对Rails来说相对较新,我发现各种各样的Rails“神奇”,所以我想知道:框架是否为我提供了这样做的方法?或者这是唯一的方法吗?
答案 0 :(得分:1)
您可以为此任务尝试Dirty属性。
@post.attributes = params[:post]
@post.changed # or changes if you want to see what values on which was changed
您可以通过此链接找到更多信息:http://ar.rubyonrails.org/classes/ActiveRecord/Dirty.html
此外,如果您想使用版本控制或审核,请尝试使用此宝石(最好的是:paper_trail,acts_as_audited,vestal_versions):
答案 1 :(得分:1)
ActiveModel正是您正在寻找的,请查看文档中的示例...
http://api.rubyonrails.org/classes/ActiveModel/Dirty.html
person = Person.find_by_name('Uncle Bob')
person.changed? # => false
person.name = 'Bob'
person.changed? # => true
person.name_changed? # => true
person.name_was # => 'Uncle Bob'
person.name_change # => ['Uncle Bob', 'Bob']
person.name = 'Bill'
person.name_change # => ['Uncle Bob', 'Bill']