Ruby on rails 3.1 具有帐户和用户的应用程序-设计用户可以';不能创建其他用户

Ruby on rails 3.1 具有帐户和用户的应用程序-设计用户可以';不能创建其他用户,ruby-on-rails-3.1,devise,Ruby On Rails 3.1,Devise,将导轨3.1.3与装置1.5.3一起使用。我的应用程序有帐户和用户。每个帐户可以有多个用户。用户可以有一个角色,“用户”或“帐户\管理员”。设计注册到账户的路线#新建。同时创建帐户和初始帐户\管理员用户。正如所描述的那样工作(尽管从那时起事情发生了一些变化) 管理员签名的帐户应该能够在该帐户中创建其他用户。这就是我遇到麻烦的地方:它没有创建新用户,只是重定向到用户路径(users#show)页面,并显示消息“您已经登录。”(用户路径是我在登录路径后被覆盖的) 这就提出了一个类似的问题。答案是为管

将导轨3.1.3与装置1.5.3一起使用。我的应用程序有帐户和用户。每个帐户可以有多个用户。用户可以有一个角色,“用户”或“帐户\管理员”。设计
注册
账户的路线#新建
。同时创建帐户和初始帐户\管理员用户。正如所描述的那样工作(尽管从那时起事情发生了一些变化)

管理员签名的帐户应该能够在该帐户中创建其他用户。这就是我遇到麻烦的地方:它没有创建新用户,只是重定向到
用户路径
(users#show)页面,并显示消息“您已经登录。”(
用户路径
是我在登录路径后被覆盖的

这就提出了一个类似的问题。答案是为管理员提供一个单独的名称空间,但由于管理员是我常规应用程序的一部分,我认为这不适用

我已经定义了一个完整的UsersController。根据日志,
GET”/users/new“
从我的“UsersController#new”呈现。然而,
POST”/users“
被designe截取并从“designe::RegistrationController#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
app/controllers/users\u 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    
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 

我错过了什么?如何让帐户管理员用户创建其他用户?

主要问题是Deavise正在拦截
POST”/users“
(以及其他一些路由)。找到了允许我的用户控制器处理这些路由的解决方法:将
designe\u更改为跳过注册,然后重新添加designe通常定义别名的路由:

routes.rb

devise_for :users, :skip => [:registrations]
devise_scope :user do
  get "signup",   :to => "accounts#new"
  get "signin",   :to => "devise/sessions#new"
  get "signout",  :to => "devise/sessions#destroy"
  get "cancel_user_registration", :to => "devise/registrations#cancel"
  post "user_registration",       :to => "users#create"
  get "new_user_registration",    :to => "accounts#new"
  get "edit_user_registration",   :to => "users#edit"
end
resources :users
resources :accounts
我一直没弄明白为什么Desive控制器的超控功能不起作用


一位用户指出gem可能是一个有趣的替代方案。

主要问题是designe正在拦截
POST”/users“
(以及其他一些路由)。找到了允许我的用户控制器处理这些路由的解决方法:将
designe\u更改为跳过注册,然后重新添加designe通常定义别名的路由:

routes.rb

devise_for :users, :skip => [:registrations]
devise_scope :user do
  get "signup",   :to => "accounts#new"
  get "signin",   :to => "devise/sessions#new"
  get "signout",  :to => "devise/sessions#destroy"
  get "cancel_user_registration", :to => "devise/registrations#cancel"
  post "user_registration",       :to => "users#create"
  get "new_user_registration",    :to => "accounts#new"
  get "edit_user_registration",   :to => "users#edit"
end
resources :users
resources :accounts
我一直没弄明白为什么Desive控制器的超控功能不起作用


网站上的一位用户指出gem可能是一个有趣的替代方案。

这就是我最终如何让它与我的设置一起工作的原因(Desive与我的用户模型绑定--没有单独的编辑器/管理模型):

当然,您需要添加一个虚拟的new.html.erb文件,该文件只需呈现_form.html.erb即可使用它


只需将新方法和创建方法添加到routes.rb文件中(无论是通过
参考资料:usermakers
,还是更具体的路由),就可以了。希望这有帮助

这就是我最终如何让它与我的设置一起工作的原因(Desive与我的用户模型绑定--没有单独的编辑器/管理模型):

当然,您需要添加一个虚拟的new.html.erb文件,该文件只需呈现_form.html.erb即可使用它

只需将新方法和创建方法添加到routes.rb文件中(无论是通过
参考资料:usermakers
,还是更具体的路由),就可以了。希望这有帮助

 <%= link_to 'Add User', new_usermaker_path, id: 'new_user_link' %>
= simple_form_for @user, url: usermakers_path, html: {multipart: true} do |f|
=f.error_notification errors: true

= f.input :name
= f.input :email

%p
= f.button :submit, 'Create User', class: 'button'