博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Ruby on Rails】Model中关于保存之前的原值和修改状态
阅读量:6894 次
发布时间:2019-06-27

本文共 839 字,大约阅读时间需要 2 分钟。

今天在Rails的Model中遇到了一个问题——

当我从Model类中获取了一个ActiveRecord对象,对其进行了一系列修改(尚未保存),我该如何确定究竟哪些修改了呢?

(设Model为Option,相关的的参数为correct)

我本来采取的方法是——在数据表中新增一个ori_correct参数,每次对象保存之前都和correct做到同步,这样一来,是不是correct字段发生了修改也就得以判断了。

但是这样的缺点也显而易见——如果以后参数个数很多的话,岂不是得每一个都得来一个相应的ori_字段?这样的话每个都要双份的建立字段,想象也觉得并不合理,总感觉Rails应该对这类问题有一个较好的解决方案。事实上的确如此,我在StackOverFlow上看到了这样的一个用法 :

Check out (available on all models by default). The documentation is really good, but it lets you do things such as:

1 @user.street1_changed? # => true/false

也就是在相应字段后面添加_changed?,这样一来问题直接解决,亲测有效。

 

然而很快另外一个问题又来了,既然知道了是否被改变,那该如何知道原来的值是什么呢?

同样的,我在StackOverFlow上找到了解决办法

Appending _was to your attribute will give you the previous value.

同样的,亲测有效。

 

以上,两个问题完美解决。

(关于更多的关于ActiveModel::Dirty所支持的各种神奇功能,请在http://api.rubyonrails.org/中输入ActiveModel::Dirty)

 

转载于:https://www.cnblogs.com/HansBug/p/6528558.html

你可能感兴趣的文章
微软职位内部推荐-Principal DEV Manager for Bing Client
查看>>
for 循环
查看>>
Entity Framework技术系列之0:开篇
查看>>
201621123048《Java程序设计》第五周学习总结
查看>>
mac编辑器vim美化
查看>>
MD5摘要算法简析
查看>>
《30天自制操作系统》学习笔记一
查看>>
Python.tornado.2.tornado.options
查看>>
mysql关于or的索引问题
查看>>
初遇Linux
查看>>
onclick事件没有反应的五种可能情况
查看>>
vue----webpack----对vuex的理解
查看>>
08----mockjs处理前端传来的路径,获取?后面的值
查看>>
蓝桥杯 算法训练 最短路 [ 最短路 bellman ]
查看>>
修改 IIS6.0 时间格式的问题。
查看>>
C# IS 和 AS 的用法和区别
查看>>
软件测试过程中的缺陷密度计算问题
查看>>
图论算法----最短路
查看>>
[备用] 百度地图兴趣点抓取
查看>>
《About Face 3:交互设计精髓》读书笔记(一)
查看>>