Ruby on Rails, can' t заставляют канкан работать

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

Это довольно просто, у меня есть Учетная запись пользователя (созданный с Завещанием), у которого может быть одна роль, или Администратор или Пользователь. Вот класс способности:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.role? :admin
      can :manage, :all
    end
  end
end

В диспетчере профиля у меня есть линия load_and_authorize_resource , класс Пользователь содержит РОЛИ = %w [пользователь администратора] . Попытка http://localhost:3000/profiles/ дает мне ошибку

wrong number of arguments (2 for 1) in app/models/ability.rb:6:ininitialize'`

Используя альтернативный метод user.admin? дает

undefined method `admin?' for #

Googling the error above gives many results so I'm not the only person having this problem, but none of the solutions have worked for me.

And yes I have added the role column to the User table

class AddRoleToUsers < ActiveRecord::Migration
  def change
    add_column :users, :role, :string
  end
end

added the Gem, ran bundle install and restarted the server.

1
nl ja de
таким образом, действительно ли вы уверены, что у вас есть эти роль? и администратор? методы?
добавлено автор Vasiliy Ermolovich, источник
поэтому просто проверьте его как если user.role == ' admin' CanCan doesn' t создают любые специальные методы для вас
добавлено автор Vasiliy Ermolovich, источник
Да, но то, что у вас есть необходимые колонки базы данных doesn' t означают, что вы автоволшебно методы звонили администратора? или роль? . Необходимо определить их сами.
добавлено автор Jesper, источник
У Пользовательского стола есть ролевая колонка. Я должен быть в состоянии сделать user.role, чтобы получить роль. Я прочитал Wiki на канкане, и это должно работать, не определяя методы github.com/ryanb/cancan/wiki/Role-Based-Authorization
добавлено автор hugh, источник
@nash От пульта рельсов , если User.first.role == "администратор" помещает "пользователя, является администратором" конец - прибыль "пользователь является администратором"
добавлено автор hugh, источник

1 ответы

Если у вас есть следующий, это должно работать:

Ability.rb

class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new # guest user
   # raise user.role?(:administrator).inspect
    if user.role? :administrator

      can :manage, :all
      can :manage, User

    elsif user.role? :user
      can :read, :all

    end

  end
end

RoleUser.rb

class RoleUser < ActiveRecord::Base
  # attr_accessible :title, :body
  belongs_to :user
  belongs_to :role

end

Роль

class Role < ActiveRecord::Base
  attr_accessible :name

  has_and_belongs_to_many :users
end

User.rb

 class User < ActiveRecord::Base

 has_and_belongs_to_many :roles

  def role?(role)
    self.roles.find_by_name(role.to_s.camelize)
  end

Вам нужно это, поскольку вы определяете свои роли, находя их, преобразовывая роль в последовательность и camelizing это.

seeds.rb

%w(Employee Administrator).each { |role| Role.create!(:name => role)}

создает множество Пользователь и Администратор .

Если вы выполняете эти шаги правильно вы, это должно работать. И также гарантируйте, чтобы у вас были следующие миграции:

class UsersHaveAndBelongsToManyRoles < ActiveRecord::Migration
  def self.up
    create_table :roles_users, :id => false do |t|
      t.references :role, :user
    end
  end

  def self.down
    drop_table :roles_users
  end
end

Тогда с вашей точки зрения необходимо ли использовать , может? , делая что-то как

<% if can? :manage, User %> 
  .......
    ....
  ...
<% end %> 
0
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff