设计 - 允许创建个人和管理员用户

时间:2018-03-26 19:42:56

标签: ruby-on-rails devise

我在这里看到了关于这个主题的几个链接,但目前还无法解决问题。我希望我的应用程序允许用户注册,但也注册其他用户。到目前为止,我的代码运气如此(虽然此时我不确定我是否在正确的道路上并且可能包含了不需要的东西才能使其工作):

routes.rb

resources :devise
devise_for :users, path: 'devise'
devise_scope :user do
  get  'users/registrations/admin_new' => 'devise/registrations#admin_new'
  post 'users/registrations/admin_create' => 'devise/registrations#admin_create'
end

这是我在路线中引用的两种方法。

controllers/user/registration_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  def admin_new
    puts "---------------"
    @user = User.new
  end

  def admin_create
    puts "---------------"   
  end
end

我的观点如下,但缩短为不包括所有字段:

views/devise/registrations/admin_new.html.haml

= simple_form_for(User.new, url: users_registrations_admin_create_path(User.new)) do |f|
  ...

这个设置让我到了网址:

http://localhost:3000/users/registrations/admin_new

加载表单不错,但插入的puts在加载时不会出现在我的控制台中,这很奇怪。此外,我以前的形式为:

= simple_form_for(@user, url: users_registrations_admin_create_path(@user)) do |f|
...

然而这导致了错误:

undefined method `model_name' for nil:NilClass

这就是为什么我改为User.new而不是@user。当我提交表单时,它返回错误:

The action 'admin_create' could not be found for Devise::RegistrationsController

我不知道为什么会这样。我还不确定我的设计结构是否正确,因为控制器包含在用户文件夹中,而视图包含在设计文件夹中。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你的路线有问题。

post 'users/registrations/admin_create' => 'devise/registrations#admin_create'

表示在Devise :: RegistrationsController

中指向admin_create操作的路径

所以路由器在Devise :: RegistrationsController中找到一个动作但是动作&#34; admin_create&#34;存在于Users :: RegistrationsController,

变化

'devise/registrations#admin_create'
=> 'user/registrations#admin_create'

<强> UPDATE1 我检查你的路线。

在控制器/ 设计 /registrations_controller.rb'

中为控制器分配路径路径
post 'users/registrations/admin_create' => 'devise/registrations#admin_create'

PREFIX users_registrations_admin_create
URL PATTERN /users/registrations/admin_create(.:format) 
Controller&Action devise/registrations#admin_create

在控制器/ 用户 /registrations_controller.rb'中为控制器分配路径路径;

post 'users/registrations/admin_create' => 'user/registrations#admin_create'

PREFIX users_registrations_admin_create
URL PATTERN /users/registrations/admin_create(.:format) 
Controller&Action user/registrations#admin_create

只有&#39;设计&#39;控制器名称已更改为&#39; user&#39;在路上,然后很好。