Rails 4 – devise_for不使用自定义控制器
我在我的Rails应用程序中使用Devise,我想自定义它的一些行为。 我已经阅读了devise_for
的文档。 但我无法使用我的自定义控制器。 我的溃败看起来像这样:
devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }
在我的Users::RegistrationsController < Devise::RegistrationsController
我尝试了以下内容:
# POST /resource def create puts "I'm here" # never happens! super end
关于我缺少的任何想法?
更新
这是我的文件结构:
更新2
想想我可能找到了问题的根源。 我在一个Bootstrap模式中渲染并呈现我的注册表单,而不是默认的Devise路径。
我在这条路上提出表格:
/apps/1/edit
并不是:
users/sign_up
如果我在这条路径上注册users/sign_up
就可以了,我的方法users/sign_up
被调用。 在我的/apps/1/edit
视图中,我提供了这样的表单:
= render "users/registrations/modal_form"
我的apps_controller
编辑操作(我提交注册表单的操作)当前是空的:
# GET /apps/1/edit def edit end
我的users/registrations/modal_form
部分的相关部分如下所示:
.modal.fade#registrations_modal{ tabindex: -1, role: 'dialog', "aria-labelledby" [..] = render "users/registrations/new_form" [..]
我的users/registrations/new_form
看起来像这样:
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| = devise_error_messages! .form-group = f.label :name = f.text_field :name, autofocus: true, class: "form-control" .form-group = f.label :email = f.email_field :email, class: "form-control" .form-group = f.label :password - if @minimum_password_length %em (#{@minimum_password_length} characters minimum) = f.password_field :password, autocomplete: "off", class: "form-control" .form-group = f.submit "Sign up", class: "btn btn-default" - if current_page?(new_user_registration_path) = render "devise/shared/links"
我对Devise并不熟悉。 关于我遗失的内容和地点的任何想法?
想想我解决了。 问题出在我的form_for
,我使用了错误的路线。 而不是使用默认的registration_path
作为url
而不是使用:
user_registration_path(resource_name)
愚蠢的错误。 进入另一个问题,我现在继续得到:注册时ActionController::UnknownFormat
。 但它现在至少使用我的自定义控制器。