I'm trying to overwrite Devise registration controller and here is my setup:
registrations_controller.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
routes.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
(...)
And it all (when i'll point my browser to registrations/create) gives me an error:
Unknown action
Could not find devise mapping for path "/registrations/create". This may happen for two reasons: 1) You forgot to wrap your route inside the scope block. For example: devise_scope :user do match "/some/route" => "some_devise_controller" end 2) You are testing a Devise controller bypassing the router. If so, you can explicitly tell Devise which mapping to use: @request.env["devise.mapping"] = Devise.mappings[:user]
I've found some threads describing similar issue but they were not helpfull at all. Thank you for any advice!
As the error message clearly states, you need to wrap your Devise routes in a block like so:
devise_scope :user do
match 'registrations/create' => 'registrations#create', :as => :user_register
end
Devise does not accept routes outside of that block.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With