Question

I am trying to override my devise registration controller, with no luck.

I finally got the routes working, but now I'm getting an superclass mismatch for class error.

Heres my setup:

Registration Controller (app/controllers/users/registrations_controller.rb)

class RegistrationsController < Devise::RegistrationsController

  def sign_up_params
    devise_parameter_sanitizer.sanitize(:sign_up)
    params.require(:user).permit(:email, :password, profile_attributes: [:username])
  end

  def new
    super
  end

  def create

  end

  def update
    super
  end

end

Routes

root 'welcome#index'

devise_for :users, :controllers => {:registrations => "users/registrations"}

Views

--edit.html.erb && new.html.erb exist in the folder (app/views/users/registrations)

User Model (just in case)

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_one :profile
  accepts_nested_attributes_for :profile

  def profile
    super || build_profile
  end

end

Any idea why this error is appearing?

Thanks!

Was it helpful?

Solution

Your controller is underneath the users directory but does not have a Users module (it is not in the Users namespace, you might say). Either change the controller to this:

module Users
  class RegistrationsController < Devise::RegistrationsController
  ...
  end
end

Or move your controller up a directory

app/controllers/registrations_controller.rb

OTHER TIPS

Define your RegistrationsController as below

class Users::RegistrationsController < Devise::RegistrationsController
  ...
end

By defining the controller as suggested above, you don't need to define the module explicitly. You get the error because you have placed the RegistrationsController inside users folder. So, rails expects that RegistrationsController is a class belonging to Users module.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top