Ruby on rails 使用控制器特定数据筛选模型

Ruby on rails 使用控制器特定数据筛选模型,ruby-on-rails,activerecord,filter,controller,Ruby On Rails,Activerecord,Filter,Controller,我有一个由几个部门使用的应用程序,其中每个部门都有一组单独的数据。因此,我得到了许多带有division\u id字段的模型,该字段指示该行所属的部门 每个用户都有分区信息,所以当他们登录时,我必须根据分区过滤数据。因此,在我的代码中有很多地方我可以这样做,例如: Contact.where(division_id: current_user.division_id) # app/models/contact.rb scope :for_user_division, -> user {

我有一个由几个部门使用的应用程序,其中每个部门都有一组单独的数据。因此,我得到了许多带有
division\u id
字段的模型,该字段指示该行所属的部门

每个用户都有分区信息,所以当他们登录时,我必须根据分区过滤数据。因此,在我的代码中有很多地方我可以这样做,例如:

Contact.where(division_id: current_user.division_id) 
# app/models/contact.rb
scope :for_user_division, -> user { where(division_id: user.division_id }

我的问题是如何重构这个代码片段?首先,我考虑使用ActiveRecord的
默认范围,但由于
分区id
是控制器特定的数据,这似乎不正确。有什么想法吗?

我不知道你为什么说
division\u id
是控制器特定的数据,因为它看起来像是从用户对象(
current\u User.division\u id
)中获得的分区。无论如何,最好的办法可能就是在这里使用作用域,然后重复作用域。例如:

Contact.where(division_id: current_user.division_id) 
# app/models/contact.rb
scope :for_user_division, -> user { where(division_id: user.division_id }
但还是要重复打电话

Contact.for_user_division(current_user)
到处都是。主要优点是,如果以后需要添加类似于只考虑
active?
分区的内容,现在可以在一个位置更改作用域的规则

我认为没有必要也不想让这件事再干下去。总的来说,我认为默认作用域是一件坏事,因为在这种情况下,一点重复在提醒自己你要处理的是什么时是有用的——一组有限的联系人

更新 如果您发现自己在多个模型中编写相同的范围,那么您肯定可以通过将范围放入关注点并根据需要将其包含到每个模型中来消除范围