Rails 3.1:可以吗?方法始终返回false

时间:2012-01-21 09:56:13

标签: ruby-on-rails-3 cancan

我的rails-App有问题。我使用cancan来隐藏某些用户的某些链接。 我没有收到任何错误,并且正确识别了用户的角​​色。但无论我尝试什么,我的链接永远不会显示。 can?-Method总是返回true。 这是我的能力课程:

 class Ability
 include CanCan::Ability

 def initialize(user)

   current_user ||= User.new # guest user (not logged in)
   puts "Debug"
   if current_user.role?(:Admin)
     can :manage, Prof
   else 
     if current_user.role?(:Proff)
       can :manage, [Exam, Note, Student,Break,Appointment]
     else 
       if current_user.role?(:Student)
         can :update, Appointment
         can :show, Exam
       end
     end
   end
  end
end

这是我认为的:@exam绝对不是零。我也尝试了考试和考试,没有任何作用。

<% if can? :edit, @exam%>
  <%= link_to 'Bearbeiten', edit_exam_path(@exam) %> |
  <%= link_to 'Alle Prüfungen', exams_path %>
<% end%>

我不知道,如果这很重要,那就是我的控制器的负责人:

class ExamsController < ApplicationController
   before_filter :login_required
   skip_authorization_check
   ...

我的考试模式:

class Exam < ActiveRecord::Base

  belongs_to :prof

  validates_presence_of :prof_id,:title,:deadline
  has_many :examdates, :dependent => :destroy
  accepts_nested_attributes_for :examdates, 
      :allow_destroy => true#, :reject_if => proc {| a| a[:date].blank? }
end

在控制台中我尝试了

 Exam.accessible_by(ability)

并得到[]。 我使用的是cancan 1.6.7,rails 3.1.0和ruby 1.8.7。

我真的希望,有人可以弄清楚,我做错了什么。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不确定,但添加

应该会很好
load_and_authorize_resource

在控制器中。
 这样,@exam已经在控制器的每个动作中加载和授权 我知道您也可以传递类而不是实例,因此Exam应该可以工作,但仍然可以尝试我的解决方案。

另请参阅Debugging-Abilities-Cancan