使用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用戶創建更多用戶?