在 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#createPOST 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就够了。