我试图覆盖我的设计注册控制器,没有运气。
我终于让路线工作了,但现在我收到了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
知道为什么会出现这个错误吗?
谢谢!
答案 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
模块的类。