Rails 4 - 将设计参数发送到用户模型方法

时间:2014-07-24 06:42:55

标签: ruby-on-rails devise params nomethoderror

我有自己的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并且它不是空的。我该如何解决这个问题?

3 个答案:

答案 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