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