Rails 3.1: может? Метод всегда возвращает false - PullRequest
0 голосов
/ 21 января 2012

У меня проблема с моим rails-App.Я использую cancan, чтобы скрыть некоторые ссылки от определенных пользователей.Я не получаю никаких ошибок, и роль пользователя правильно распознается.Но что бы я ни пытался, моя ссылка никогда не показывается.Может? -Метод всегда возвращает истину.Это мой класс способностей:

 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 голосов
/ 21 января 2012

Я не уверен, но все должно быть хорошо, добавив

load_and_authorize_resource

в контроллере.
Таким образом, @exam уже загружен и авторизован для каждого действия в контроллере.
Я знаю, что вы также можете передать класс вместо экземпляра, поэтому Exam должен работать, но все же попробуйте мое решение.

Также посмотрите на Отладка-Способности-Канкан

...