ActiveRecord本地/离线关联范围

时间:2014-01-27 23:07:37

标签: ruby-on-rails rails-activerecord

有时候我编写的代码可以简化如下:

user.items.active.each { |i| ...do something... }
...some stuff...
user.items.recent.each { |i| ...do something else... }
...some other stuff...
user.items.weird.active.each { |i| ...do whatever... }

项目是用户和活动的has_many关联,最近和奇怪的是范围。问题是每个作用域都会对数据库进行单独调用 - 而如果每个用户只有几个项目,那么获取所有这些项目并“离线”过滤它们会更有效。所以我可以将上面改写为:

user.items.select { |i| i.active? }.each { |i| ...do something... }
...some stuff...
user.items.select { |i| i.created_at > 7.days.ago }.each { |i| ...do something else... }
...some other stuff...
user.items.select { |i| i.weirdness > 50 and i.active? }.each { |i| ...do whatever... }

哪个会做我想要的,但看起来很糟糕...在用户上定义active_items,recent_items,weird_active_items方法会有所帮助,但请注意组合范围更容易。有没有更多的“Rails方式”来做到这一点?就像在关系上添加自定义方法一样?

0 个答案:

没有答案