2011-11-08 45 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'要保護! –

相關問題