在 Devise::Registrations#create 中为电子邮件设计 NoMethodError
Devise NoMethodError in Devise::Registrations#create for email
我的 Rails 4.2 应用程序使用 devise 进行身份验证,但它打算不使用用户的电子邮件,因此没有 SQL 列用于电子邮件。所以我进入 /config/intializers/devise.rb
并将文件更改为 config.authentication_keys = [ :username ]
。不幸的是,当我尝试点击应该指向 Devise::Registrations#create
的 POST localhost:3000/users
端点时,我得到了这个响应:
我的应用程序不需要任何 HTML 模板,因为它只是一个 API。使用 byebug
,我可以看到我编写的代码的 none 被命中了。这是我目前所拥有的:
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_sign_up_params, only: [:create]
before_filter :configure_account_update_params, only: [:update]
# POST /resource
def create
byebug
super
@user = User.new(params[:user])
if @user.save
respond_to do |format|
format.json do
render json: @user, serializer: UserLoginSerializer
end
end
else
respond_to do |format|
format.json do
render status: :unprocessable_entity, json: {
error: "Invalid Parameters for User Creation"
}
end
end
end
# protected
# You can put the params you want to permit in the empty array.
def configure_sign_up_params
devise_parameter_sanitizer.for(:sign_up) << :username, :password, :password_confirmation, :platform
end
end
如何在不创建无用的额外 :email
属性的情况下绕过此错误?
糟糕,我忘了在 routes.rb
中指定我的控制器。你必须做:
devise_for :users, controllers: {
registrations: "users/registrations",
sessions: 'users/sessions'
}
我以为devise_for :users
就够了。
我的 Rails 4.2 应用程序使用 devise 进行身份验证,但它打算不使用用户的电子邮件,因此没有 SQL 列用于电子邮件。所以我进入 /config/intializers/devise.rb
并将文件更改为 config.authentication_keys = [ :username ]
。不幸的是,当我尝试点击应该指向 Devise::Registrations#create
的 POST localhost:3000/users
端点时,我得到了这个响应:
我的应用程序不需要任何 HTML 模板,因为它只是一个 API。使用 byebug
,我可以看到我编写的代码的 none 被命中了。这是我目前所拥有的:
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_sign_up_params, only: [:create]
before_filter :configure_account_update_params, only: [:update]
# POST /resource
def create
byebug
super
@user = User.new(params[:user])
if @user.save
respond_to do |format|
format.json do
render json: @user, serializer: UserLoginSerializer
end
end
else
respond_to do |format|
format.json do
render status: :unprocessable_entity, json: {
error: "Invalid Parameters for User Creation"
}
end
end
end
# protected
# You can put the params you want to permit in the empty array.
def configure_sign_up_params
devise_parameter_sanitizer.for(:sign_up) << :username, :password, :password_confirmation, :platform
end
end
如何在不创建无用的额外 :email
属性的情况下绕过此错误?
糟糕,我忘了在 routes.rb
中指定我的控制器。你必须做:
devise_for :users, controllers: {
registrations: "users/registrations",
sessions: 'users/sessions'
}
我以为devise_for :users
就够了。