我正在尝试使用设计覆盖重置密码控制器,但无论如何它给了我这个错误。我不明白实际原因是什么。我正在分享我的代码
passwords_controller.rb
class Api::V1::PasswordsController < Devise::PasswordsController
skip_before_action :require_login!
def new
@user = User.new
end
def create
@user = User.send_reset_password_instructions(params[:user])
if successfully_sent?(@user)
head :status => 200
else
render :status => 422, :json => { :errors => @user.errors.full_messages }
end
end
end
路线
devise_for :users,controllers: {
sessions: 'api/v1/sessions',
registrations: 'api/v1/registrations',
:passwords => 'api/v1/passwords'
}
邮差
我正在使用参数访问此URL
http://localhost:3000/users/password
Method - Post
Body (raw)
{
"email": "some-email@gmail.com"
}
收到此错误 NoMethodError (nil:NilClass 的未定义方法 'with_indifferent_access'):
必须在用户实例而不是模型上调用send_reset_password_instructions。
我在模型上称send_reset_password_instructions。它应该在用户实例上调用。这是代码
def create
@user = User.find_by(email: params[:email])
@user.send_reset_password_instructions
if successfully_sent?(@user)
head :status => 200
else
render :status => 422, :json => { :errors => @user.errors.full_messages }
end
end