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