2011-11-08 37 views
0

Rails应用程序中,我有编辑的资源很多领域一种特殊形式。既然我也想记录这个特定资源的变化,我需要知道哪些参数已更改。回报率:如何判断的形式PARAMS已经改变

目前这种形式,我在与隐藏字段以标签的形式复制的各个领域,所以在控制,每场相比,相应的隐藏字段,以确定是否值被改变。但在视图和控制器中这是很多工作。

相对较新到Rails,我发现各种Rails的“神奇”,因为我走的,所以我想知道:是否该框架提供了一种方式来为我做到这一点?或者这是非常唯一的方法?

回答

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'] 
+0

是的,你是对的。在导轨3中,它被提取到ActiveModel。我顶部的链接有点过时了。 –

+0

谢谢,劳埃德!这看起来很完美!在我完成了所有的RTFM之后,我无法相信我以前从未遇到过。 –

1

你可以试试这个任务肮脏的属性。

@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):

+0

不要在这种情况下,还不忘加'attr_accessible'要保护! –

相关问题