首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails CanCanCan &定义能力

Rails CanCanCan &定义能力
EN

Stack Overflow用户
提问于 2015-10-03 21:39:36
回答 1查看 318关注 0票数 0

我试图在Rails 4中制作一个应用程序。

我使用CanCanCan作为权限,Role_Model用于角色管理。

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

代码语言:javascript
复制
 elsif user.try(:profile).present? && user.profile.has_role?(:student)

      student_abilities

然后:

代码语言:javascript
复制
def student_abilities
can :read, Project.visible.current.available

在我的project.rb中,我将作用域定义为:

代码语言:javascript
复制
    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')}

当我试图启动服务器并生成视图时,我会得到以下错误:

代码语言:javascript
复制
NoMethodError at /project_invitations
undefined method `available' for #<Project::ActiveRecord_Relation:0x007fdde41f2ee8>

当我尝试从能力的末尾删除可用时,这样做是公正的:

代码语言:javascript
复制
can :read, Project.visible.current

我知道这个错误:

代码语言:javascript
复制
 entry for table "project"
LINE 1: ..." = 'true' AND "finalises"."draft" = 'false' AND (project.st...
                                                             ^

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

有人能看到我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-03 21:57:54

  1. 检查表名。它真的叫“项目”,而不是“项目”吗?
  2. 你描述范围的方式有点奇怪。例如,我会将它描述为where('closed =', 'false'),而不是where(closed: false),以最小化识别SQL的片段的数量。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32927757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档