Rails CanCanCan&定义能力

时间:2015-10-03 21:39:36

标签: ruby-on-rails permissions cancan scopes cancancan

我正在尝试在Rails 4中创建一个应用程序。

我使用CanCanCan获取权限,使用Role_Model进行角色管理。

在我的能力.rb中,我将学生的能力定义为:

 elsif user.try(:profile).present? && user.profile.has_role?(:student)

      student_abilities

然后:

def student_abilities
can :read, Project.visible.current.available

在我的project.rb中,我将范围定义为:

    scope :visible, lambda { joins(:sweep => :disclosure).where('disclosures.allusers' => 'true')
        .joins(:sweep => :finalise).where('finalises.draft' => 'false') }
  scope :current, lambda { where('project.start_date >= ?', Date.today)}
  scope :available, lambda { where('closed =', 'false')}

当我尝试启动服务器并生成视图时,出现此错误:

NoMethodError at /project_invitations
undefined method `available' for #<Project::ActiveRecord_Relation:0x007fdde41f2ee8>

当我尝试从能力的最后移除可用时,它只是:

can :read, Project.visible.current

我收到此错误:

 entry for table "project"
LINE 1: ..." = 'true' AND "finalises"."draft" = 'false' AND (project.st...
                                                             ^

我不知道为什么它不会让我阅读错误消息的结尾。

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

  1. 检查表名。是真的叫&#34;项目&#34;,不是&#34;项目&#34;?

  2. 您描述范围的方式有点奇怪。例如。而不是where('closed =', 'false')我将其描述为where(closed: false),最小化SQL感知片段的数量