【Ruby on Rails】Model中關於保存以前的原值和修改狀態

今天在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)

相關文章
相關標籤/搜索