cancancan管理关系Rails

时间:2016-07-28 18:12:26

标签: ruby-on-rails ruby cancancan

我遇到了cancancan gem for rails

的问题
if 'test' in sys.argv:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3'
        }
    }

我有四种模式:用户,公司,地点,群组

用户:属于公司 公司:有很多地方 位置:属于公司 组:属于位置

在能力模型中我有这个:

gem 'cancancan', '~> 1.10'

创建新群组时,我被拒绝(无法访问)

我正在寻找允许用户创建一个公司位置ID的公司的正确方法(注意:没有cancancan就可以了,所有的ID都是相关的,等等)。

1 个答案:

答案 0 :(得分:1)

确保我完全理解你的问题......

您是否正在寻找一种方法来限制用户根据用户所属公司的位置管理群组的能力?

假设我说得对,我建议使用#pluck

can :manage, Group, location_id: user.company.locations.pluck(:id)

这会收集用户公司位置上的所有:id,并确保用户只能管理该集合中包含:location_id的组。

从功能上讲,这与您所做的完全相同,但在两个方面更有效:

  1. 它不涉及任何不必要的Ruby逻辑

  2. 使用#pluck仅查询某个位置的:id,而不是查询整个位置所有属性

  3. 一般来说,无论何时在Rails中访问数据库,最好完全使用ActiveRecord方法。这将有助于防止您浪费时间查询不需要的额外信息,并消除使用Ruby重新构建数据的额外开销。

    希望有所帮助!