我在这里看到了关于这个主题的几个链接,但目前还无法解决问题。我希望我的应用程序允许用户注册,但也注册其他用户。到目前为止,我的代码运气如此(虽然此时我不确定我是否在正确的道路上并且可能包含了不需要的东西才能使其工作):
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
我不知道为什么会这样。我还不确定我的设计结构是否正确,因为控制器包含在用户文件夹中,而视图包含在设计文件夹中。对此的任何帮助将不胜感激。
答案 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;在路上,然后很好。