今天在Rails的Model中遇到了一個問題——html
當我從Model類中獲取了一個ActiveRecord對象,對其進行了一系列修改(還沒有保存),我該如何肯定究竟哪些修改了呢?api
(設Model爲Option,相關的的參數爲correct)ruby
我原本採起的方法是——在數據表中新增一個ori_correct參數,每次對象保存以前都和correct作到同步,這樣一來,是否是correct字段發生了修改也就得以判斷了。spa
可是這樣的缺點也顯而易見——若是之後參數個數不少的話,豈不是得每個都得來一個相應的ori_字段?這樣的話每一個都要雙份的創建字段,想象也以爲並不合理,總感受Rails應該對這類問題有一個較好的解決方案。事實上的確如此,我在StackOverFlow上看到了這樣的一個用法 :code
Check out ActiveModel::Dirty (available on all models by default). The documentation is really good, but it lets you do things such as:htm
1 @user.street1_changed? # => true/false
也就是在相應字段後面添加_changed?,這樣一來問題直接解決,親測有效。對象
然而很快另一個問題又來了,既然知道了是否被改變,那該如何知道原來的值是什麼呢?blog
一樣的,我在StackOverFlow上找到了解決辦法get
Appending
_was
to your attribute will give you the previous value.同步
一樣的,親測有效。
以上,兩個問題完美解決。
(關於更多的關於ActiveModel::Dirty所支持的各類神奇功能,請在http://api.rubyonrails.org/中輸入ActiveModel::Dirty)