2013-03-14 31 views
0

我正在使用Rails 3.0.9Ruby on Rails3如何在不改变太多现有代码的情况下过滤数据

我的项目只是为单个群组创建的。现在我想增强我的项目以启用多个组的访问权限。在我的数据库中,我会在用户表和活动表中添加一个新列。 架构更改: 表:用户ID , 名, GROUP_ID#新增

表:活动 ID, ACTIVITY_NAME, GROUP_ID#新增

现在,如果users.group_id是1,在活动页面上,用户只能使用activities.group_id = 1查看数据。

由于此处存在大量的代码和逻辑,因此我不想更改控件和视图。该数据过滤器也发生在其他表格上。 我知道有一种方法可以使用current_user.activities.find(:all),但它会影响我项目中几乎所有的代码。

有没有什么办法可以配置特定用户的数据过滤器而不需要改变太多代码?

在此先感谢!

+1

你试过范围吗? http://guides.rubyonrails.org/active_record_querying.html#scopes和默认范围http://guides.rubyonrails.org/active_record_querying.html#applying-a-default-scope – 2013-03-14 07:45:09

+1

范围是要走的路,但我会不鼓励使用default_scope。它可能会导致意想不到的副作用。作为一个快速回答:您至少需要更改您的控制器代码 - 这个问题不仅仅是业务逻辑,还有表示逻辑。没有神奇的方法来自动支持您的规格变化!这就是为什么鼓励使用范围的原因:如果您的业务逻辑已经使用它们,那么您只需修改它们即可。另一方面,如果你所有的“查找”逻辑都在你的控制器中,你将会有一段糟糕的时间。 – 2013-03-14 08:46:36

回答

0

退房租赁宝石。 https://github.com/yoolk/tenancy

如果您设置Group.current = group,它会将group_id = Group.current.id添加到所有查询中对象为scoped_to group的所有查询中。

它非常干净,为您的每个模型添加了〜3行代码。我的application_controller在Devise登录后设置Group.current。 (另外~3行代码)

相关问题