RoR:如何判断表单中的哪些参数已经改变

时间:2011-11-08 14:49:47

标签: ruby-on-rails-3

在Rails应用程序中,我有一个特殊的表单,其中包含许多用于编辑资源的字段。由于我还想记录这个特定资源的更改内容,我需要知道哪些参数更改了。

目前,在此表单中,我已使用隐藏字段标记复制了表单中的每个字段,因此在控制器中,每个字段都与相应的隐藏字段进行比较,以确定值是否已更改。但是在视图和控制器中有很多工作。

对Rails来说相对较新,我发现各种各样的Rails“神奇”,所以我想知道:框架是否为我提供了这样做的方法?或者这是唯一的方法吗?

2 个答案:

答案 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']