Ruby on rails Rails 4-向用户模型方法发送设计参数
我有自己的RegistrationController,它继承自Deave。在更新中,我想向我的用户方法发送参数,如下所示:Ruby on rails Rails 4-向用户模型方法发送设计参数,ruby-on-rails,devise,params,nomethoderror,Ruby On Rails,Devise,Params,Nomethoderror,我有自己的RegistrationController,它继承自Deave。在更新中,我想向我的用户方法发送参数,如下所示: 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_
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参数,而且它不是空的。如何解决此问题?尝试以下方法:
unless params[:user].blank?
if params[:user][:name].blank?
#do your stuff
end
end
这里的错误是,它试图在nil对象上调用[],因为params或flash不太可能是nil,您调用[]的唯一其他位置是params[:user],这表明这是nil 两个选项,检查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 try是一种rails方法,而不是ruby。您确定资源是在运行update时生成的吗?在Rails 4中,build_资源是在该方法内部构建的。您可能想使用资源类?U不理解我的意思。我试图调用checkinvoice时,第一行出错。