类RegistrationController的超类不匹配 - 覆盖设计控制器

时间:2014-03-04 16:22:43

标签: ruby-on-rails ruby-on-rails-4 devise

我试图覆盖我的设计注册控制器,没有运气。

我终于让路线工作了,但现在我收到了superclass mismatch for class错误。

继承我的设置:

注册管理员(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

路线

root 'welcome#index'

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

观看次数

- edit.html.erb&amp;&amp; new.html.erb存在于文件夹(app / views / users / registrations)

用户模型(以防万一)

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

知道为什么会出现这个错误吗?

谢谢!

2 个答案:

答案 0 :(得分:10)

您的控制器位于users目录下,但没有Users模块(您可能会说,它不在Users命名空间中)。将控制器更改为:

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

或将控制器移到目录

app / controllers / registrations_controller.rb

答案 1 :(得分:2)

RegistrationsController定义如下

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

通过如上所述定义控制器,您无需显式定义模块。 您收到错误是因为您已将RegistrationsController放在users文件夹中。 因此,rails期望RegistrationsController是属于Users模块的类。