直接用 updated_at 判断不可以吗?关联属性更新的话 touch 一下。
没用过这个,刚刚看了看 JR 的文档。感觉我还是偏向 AMS 一些。 AMS 还是更偏向一个 serializer 的设置,这个 JR 则是把整个 api 都帮你做了。简单的项目比较方便,但是随着代码越来越复杂,gem 的便利不在的时候还是觉得单一功能更符合我喜好。 字段的筛选两个都可以做到。AMS 也有 json api 输出。
另外纠正下楼主,第二条对应的是 abstract 特性。immutable 是无法 put 或 patch。
不错,想的挺仔细的。
#6 楼 @eagle_122 万一被我挖过来怎么办😂😂😂
还要兼职做前端
#10 楼 @watraludru #11 楼 @msg7086 同意你们的说法,database_cleaner 提供了更强大的数据库清理手段,而在测试时清楚自己需要哪个为什么用哪个,测试数据在哪里被创建哪里被还原这样踩得坑会更少 。
#8 楼 @hfpp2012 我对这个问题最早的追溯实在某本书里提到默认的策略清不干净,所以作者建议使用 database_cleaner。当时还比较懵懂,所以没有细研究。
成熟的测试框架在 setup 和 teardown 中都包含有数据库清理策略。所以后来我就很奇怪为什么要额外引入一个清理数据库的工具。我一直喜欢不引入新的 gem 直到我确认我需要它,后来我也就一直没有引入这个 gem,发现并没有对我的测试造成什么影响。
让我对这件事开始比较郁闷是因为我们一个小同学在初始化测试框架的时候,直接就把这些 gem 包含了进来,于是我问他为什么要这么做,框架自带的功能不能满足吗?他并无法解释只是因为别人的文章里全都这么写的,他没有消化的直接拿了过来。
另外config.use_transactional_fixtures = true
这个在 rspec 中并不特指 rails 的 fixture,factory_girl 也是同样适用的。只代表测试中把所有的夹具都放在事务中,一旦测试完成则回退整个事务。
我理解 database_cleaner 的意义一个是更多的 orm,以及说是更灵活的清理方式吧,在 each
这种清理方式无法满足你的测试策略时候可能会用到,但是我还没遇到过这种情况。。即使我遇到了比如在 before(:all) 中写入数据这种很少见的情况,我也可能依然会手动清理,这个 gem 可能也帮不上我什么。
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end
我认为如果使用这个默认的写法效果应该是和使用config.use_transactional_fixtures = true
相同的。
最后分享一个曾经遇到的小坑,就是使用config.use_transactional_fixtures = true
时,在 rails 5 之前 model 的after_commit
callback 是不会被执行的,因此有人建议使用 database_cleaner,而我选择的是使用test_after_commit 来解决这个问题
#6 楼 @hfpp2012 我只是对所有 rspec 的帖子中一律添加 database_cleaner 的行为发出请教。 尤其是你特意删除掉 use_transactional_fixtures 而又加上 database_cleaner 的行为更让我奇怪. 因为在我看来两种方式的作用是一样的..一定会有什么无法拒绝的原因比如 rspec 的 bug 之类的才会让大家转而使用这个 gem.
而连接中的内容也并没有用 hook 去清除...你不愿意看的话我可以把解释部分帮你贴出来..
The name of this setting is a bit misleading. What it really means in Rails is "run every test method within a transaction." In the context of rspec-rails, it means "run every example within a transaction."
The idea is to start each example with a clean database, create whatever data is necessary for that example, and then remove that data by simply rolling back the transaction at the end of the example.
另外我并不是揣测你的想法..只是对你根本没有想过这个问题而流露的一点遗憾.....
#4 楼 @hfpp2012 https://relishapp.com/rspec/rspec-rails/docs/transactions 看来你也是并不知道为什么就加了这个 gem
所有的 rspec 使用介绍全都安装 DatabaseCleaner 的意义是什么呢?rspec 在执行完每个用例不会对数据进行清理吗? 什么情况下需要 database_cleaner 呢?
好动心.....对前端团队...
注册资本好高
活动行上面时间写成凌晨了。2015 年 12 月 6 日 2:00 ~ 2015 年 12 月 6 日 5:00
这个并不完美~
verify_rucaptcha?
这里有逻辑不全,攻击者只需要手动填写一次验证码即可利用这个 session 使用脚本继续刷注册..
感觉快要抵挡不住诱惑从 unicorn 改用 puma 了...
个人觉得 rails girls 略带性别歧视的意思...
而论坛里同样 RTFM 的问题女人问出来就好多人回答....毫无节操....
这个结构为啥不用单表继承
别人家的公司
然而淘宝的源一点都不快。
直接用 oneapm 就好啦~
招聘贴质量比之前有诚意了不少~之前的血汗工厂即时感没有了~
支持 B 站
为啥 e 袋洗赞助的场地不在 751 附近呢,中关村好远啊...
不知道为啥总觉得 ruby 做 microservice 是邪教=.=
after_save
是在 commit 发生之前,你没 commit 呢当然 previous_changes 不起作用
另外你这个情况适合用
after_save :touch_method, if: ->(){ attr_changed? }
现在这俩还算高质量吗.....
我更倾向于在应用间使用 pub/sub 模式进行沟通. 现在实际应用中是使用队列进行沟通。