Использование Rails 3.1.3 с Devise 1.5.3.Мое приложение имеет учетные записи и пользователей.Каждая учетная запись может иметь несколько пользователей.Пользователь может иметь одну роль: «пользователь» или «account_admin».Разработайте signup
маршруты до accounts#new
.Учетная запись и начальный пользователь account_admin создаются одновременно.Получилось так, как описано здесь (хотя с некоторых пор все изменилось).
Учетная запись account_admin должна иметь возможность создавать дополнительных пользователей в этой учетной записи.Вот где у меня проблемы: вместо создания новых пользователей он просто перенаправляет на страницу user_path
(users # show) с сообщением «Вы уже вошли в систему».(user_path
это мой переопределенный after_sign_in_path
.)
Эта статья задает аналогичный вопрос.Ответ предполагает отдельное пространство имен для администраторов, но поскольку администраторы являются частью моего обычного приложения, я не думаю, что это применимо.
Я определил полный UsersController.Согласно журналу, GET "/users/new"
отрисовывает из моего "UsersController # new".Однако POST "/users"
перехватывается Devise и выводится из "Devise :: RegistrationsController # create".
config / rout.rb
devise_for :users
devise_scope :user do
get "signup", :to => "accounts#new"
get "signin", :to => "devise/sessions#new"
get "signout", :to => "devise/sessions#destroy"
end
resources :users
resources :accounts
app / controllers / users_controller.rb
class UsersController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource # CanCan
...
def new
# CanCan: @user = User.new
end
def create
# CanCan: @user = User.new(params[:user])
@user.skip_confirmation! # confirm immediately--don't require email confirmation
if @user.save
flash[:success] = "User added and activated."
redirect_to users_path # list of all users
else
render 'new'
end
end
...
end
Я пытался переопределить контроллер Devise , думая, что могу сказать ему использовать мое действие users#create
, если пользователь уже вошел в систему. В журнале сказано, что он использует мой контроллер(«Обработка с помощью RegistrationsController # create as HTML»), но он, похоже, не выполняет свой код.Я закомментировал свои пользовательские действия и просто оставил их в строках регистрации, но я не получаю сообщения регистрации.И несмотря на то, что super
закомментировано, поведение не меняется - оно по-прежнему перенаправляет с «Вы уже вошли в систему».
config / rout.rb
devise_for :users, :controllers => {:registrations => "registrations"}
app / controllers / registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
logger.info "Custom RegistrationsController: new"
super
end
def create
logger.info "Custom RegistrationsController: create"
# super unless user_signed_in?
# render "users#create"
end
def update
super
end
end
Чего мне не хватает?Как я могу позволить пользователю account_admin создавать дополнительных пользователей?