Во-первых, это моя версия ruby и rails с парой важных версий гемов.
- Ruby 1.9.3-p125
- Rails 3.2.2
- Devise 2.0.4
- CanCan 1.6.7
Я использовал шаблон от Дэниела Кехо, чтобы быстро запустить и запустить проект.
$ rails new myapp -m https://raw.github.com/RailsApps/rails3-application-templates/master/rails3-devise-rspec-cucumber-template.rb -T
Моя проблема:
У меня есть раздел администрирования для создания новых пользователей и две роли с этой возможностью.У меня есть требование, пользователи с правами администратора не должны иметь возможность создавать пользователей superadmin.
Когда администратор входит в систему и нажимает на кнопку нового пользователя, список ролей фильтруется для удаления опции superadmin, если я выхожу изроль администратора и войдите в систему как суперадмин, затем создайте пользователя, у меня есть отфильтрованный список от администратора.Если я обновляюсь 5-6 раз, я получаю правильно отфильтрованный список.
Модель пользователя
# /app/models/user.rb
class User < ActiveRecord::Base
ROLES = {
superadmin: 'superadmin',
admin: 'admin'
}
def role?(role)
self.role == role.to_s
end
end
Контроллер пользователя
# /app/controllers/admin/users_controller.rb
module Admin
class UsersController < BaseController
load_and_authorize_resource
def new
@user = User.new
@roles = User::ROLES
if current_user.role? :admin
@roles.delete :superadmin
end
end
end
end
Просмотр
# /app/views/admin/users/_form.html.haml
= form_for [:admin, @user], html: { class: 'form-horizontal' } do |f|
...
.control-group
= f.label :role, class: 'control-label'
.controls
= f.select :role, @roles, selected: :admin
Если кто-нибудь может указать мне правильное направление относительно того, почему @roles сохраняет свое значение между входом в систему / выходом из системы для пользователей с различными ролями, но затем очищается, что было бы действительно полезно, спасибо, я был озадачен этим болеечас, как и несколько других.