我有自己的RegistrationsController
,它继承自Devise。在更新中,我想将params
发送到我的User
方法,如上所述:
def update
params = resource.delete_invoice(params) if resource.check_invoice(params[:user])
if params[:user][:name].blank?
flash[:alert] = t 'devise.registrations.wrong_user_name'
redirect_to action: 'edit' and return
end
super
end
不幸的是我得到错误:
NoMethodError in Users::RegistrationsController#update, undefined method `[]' for nil:NilClass
这很奇怪,因为我通常可以写puts params
并且它不是空的。我该如何解决这个问题?
答案 0 :(得分:0)
试试这个:
unless params[:user].blank?
if params[:user][:name].blank?
#do your stuff
end
end
答案 1 :(得分:0)
这里的错误是它试图在一个nil对象上调用[],因为params或flash不太可能是nil,你调用[]的唯一其他地方是params [:user],这表明这是零。
几个选项,检查params [:user]是否为nil或使用try:
if params[:user].nil? or params[:user][:name].blank?
flash[:alert] = t 'devise.registrations.wrong_user_name'
redirect_to action: 'edit' and return
end
可替换地:
if params[:user].try(:fetch, :name).try(:blank?)
flash[:alert] = t 'devise.registrations.wrong_user_name'
redirect_to action: 'edit' and return
end
我认为这更整洁。 NB尝试是一种rails方法,而不是ruby。
答案 2 :(得分:0)
您确定在运行更新时是否构建了资源?在Rails 4中,build_resource
正在该方法devise/registrations_controller中构建。您可能想使用resource_class
?