使用Rails 3.1.3和Devise 1.5.3。我的应用有帐户和用户。每个帐户可以有多个用户。用户可以有一个角色,“用户”或“account_admin”。设计signup
路线到accounts#new
。该帐户和初始account_admin用户同时创建。按照here的描述得到了这个工作(尽管事情自那时起已经发展了一些)。账户和用户的应用程序 - 设计用户无法创建其他用户
account_admin标志应该能够在该帐户中创建其他用户。这就是我遇到麻烦的原因:它不是创建新用户,而是重定向到user_path
(users#show)页面,并显示消息“您已经登录”。 (user_path
是我被覆盖的after_sign_in_path
。)
这个article问了一个类似的问题。答案为管理员建议了一个单独的名称空间,但由于管理员是我的常规应用程序的一部分,我不认为这适用。
我已经定义了一个完整的UsersController。根据日志,GET "https://stackoverflow.com/users/new"
从我的“UsersController#new”呈现。但是POST "/users"
被Devise拦截并从“Devise :: RegistrationsController#create”渲染。
的config/routes.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
应用程序/控制器/ 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
我试过overriding the Devise controller,想我可以告诉它使用我users#create
行动,如果用户已经登录。日志告诉我它正在使用我的控制器(“Processing by RegistrationsController#create as HTML”),但它似乎没有执行它的代码。我已经注释掉了我的自定义操作,只留在记录器行中,但我没有收到日志消息。尽管super
被注释掉了,但行为不会改变 - 它仍然会重定向到“您已经登录”。
的config/routes.rb中
devise_for :users, :controllers => {:registrations => "registrations"}
应用程序/控制器/ 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用户创建更多用户?