rails cancan gem неинициализированная константа CanCan :: Способность::I18n

#ruby-on-rails #ruby #authorization #cancan #activesupport

#ruby-on-rails #ruby #авторизация #cancan #activesupport

Вопрос:

Я хочу отключить доступ к контроллеру страниц для пользователей, имеющих роль «автор», используя cancan (автор Райан Бейтс).

PagesController выглядит следующим образом

 class PagesController < ApplicationController
  def new
    @page = Page.new
    authorize! :update, @page
    ...
  end
  ...
end
  

Это возвращает неинициализированную константу CanCan::Способность::I18n
Обратите внимание, что то же самое происходит, когда я использую

фильтр load_and_authorize_resource вместо
авторизации! :update, @page

Я использую Rails 2.2.3. Кто-нибудь сталкивался с подобной проблемой? Спасибо

Добавление кода ability.rb:

 class Ability
include CanCan::Ability

def initialize(current_user)
    user = User.find(:first, :conditions => ["username = ?", current_user])
    user ||= User.new # guest user

    if user.role?('admin')
      can :manage, :all
      can :manage, WpArticle
    elsif user.role?('moderator')
        can :manage, :all
    elsif user.role?('author')
        can :create, WpArticle
        can :update, WpArticle
        can :read, WpArticle
    end
  end
end
  

Комментарии:

1. I18n относится к интернационализации (например, на разных языках). Используете ли вы Rails на языке, отличном от английского?

2. Чтобы лучше помочь вам в этом, вы также опубликуете свой ability.rb файл.

3. @AlexPeattie Некоторые таблицы в базе данных MySQL используют тип сортировки latin1_swedish_ci, другие используют utf8_general_ci. Как вы думаете, это проблема? Спасибо

4. @janders223 Добавил код ability.rb. Спасибо

Ответ №1:

Вам необходимо установить драгоценный камень i18n. Надеюсь, после установки это должно сработать.