Rails CanCanCan 和定义能力
Rails CanCanCan & Defining Abilities
我正在尝试在 Rails 4.
中制作一个应用程序
我使用 CanCanCan 进行权限管理,Role_Model 进行角色管理。
在我的 ability.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>
当我尝试从技能末尾删除 available 时,它只是:
can :read, Project.visible.current
我收到这个错误:
entry for table "project"
LINE 1: ..." = 'true' AND "finalises"."draft" = 'false' AND (project.st...
^
我不知道为什么它不让我阅读错误消息的结尾。
谁能看出我做错了什么?
检查 table 名称。真的叫"project",不是"projects"吗?
您描述作用域的方式有点奇怪。例如。而不是 where('closed
=', 'false')
我会把它描述为 where(closed: false)
,最小化 SQL 感知片段的数量
我正在尝试在 Rails 4.
中制作一个应用程序我使用 CanCanCan 进行权限管理,Role_Model 进行角色管理。
在我的 ability.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>
当我尝试从技能末尾删除 available 时,它只是:
can :read, Project.visible.current
我收到这个错误:
entry for table "project"
LINE 1: ..." = 'true' AND "finalises"."draft" = 'false' AND (project.st...
^
我不知道为什么它不让我阅读错误消息的结尾。
谁能看出我做错了什么?
检查 table 名称。真的叫"project",不是"projects"吗?
您描述作用域的方式有点奇怪。例如。而不是
where('closed =', 'false')
我会把它描述为where(closed: false)
,最小化 SQL 感知片段的数量