3

我正在尝试覆盖Devise注册控制器,这是我的设置:

注册控制器.rb

class RegistrationsController < Devise::RegistrationsController
  before_filter :authenticate_user!, :only => :token

  def new
    super
  end

  def create
    @request.env["devise.mapping"] = Devise.mappings[:user]
    @user = User.new(params[:user])

    if @user.save
      render 'create.js', :success => true
    else
      render 'create.js', :success => false
    end
  end
end

路线.rb

(...)
devise_for :users, :controllers => {:sessions => 'sessions', :registrations => 'registrations'}
match 'registrations/create'        => 'registrations#create'   , :as => :user_register
# not matter if i'll put `match 'registrations/create'` line above or under the `devise_for` line
(...)

这一切(当我将浏览器指向时registrations/create)给了我一个错误:

未知动作

找不到路径“/registrations/create”的设计映射。这可能有两个原因:1)您忘记将您的路线包装在范围块内。例如: devise_scope :user do match "/some/route" => "some_devise_controller" end 2) 您正在测试绕过路由器的设计控制器。如果是这样,您可以明确告诉 Devise 使用哪个映射:@request.env["devise.mapping"] = Devise.mappings[:user]

我发现一些线程描述了类似的问题,但它们根本没有帮助。感谢您的任何建议!

4

1 回答 1

5

正如错误消息明确指出的那样,您需要将您的设计路线包装在一个块中,如下所示:

devise_scope :user do
  match 'registrations/create' => 'registrations#create', :as => :user_register
end

设计不接受该块之外的路线。

于 2012-08-22T13:08:02.597 回答