Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在控制器中';s action`params=params.merge({})`引发NoMethodError:undefined方法`merge';零级:零级_Merge_Params_Ruby On Rails 5_Nomethoderror_Actioncontroller - Fatal编程技术网

在控制器中';s action`params=params.merge({})`引发NoMethodError:undefined方法`merge';零级:零级

在控制器中';s action`params=params.merge({})`引发NoMethodError:undefined方法`merge';零级:零级,merge,params,ruby-on-rails-5,nomethoderror,actioncontroller,Merge,Params,Ruby On Rails 5,Nomethoderror,Actioncontroller,我正在将我的Ruby 2.3.1/Rails 4.2.5.1升级到Rails 5.0.0.1,在为以下控制器运行控制器规范时遇到一个奇怪的错误: 在我的控制器中,我有以下代码: class Api::InboundSmsCallbackController < ActionController::Base include Api::SmsCallbackHelpers include Api::ServiceErrorHelpers # GET /inbound_sms

我正在将我的Ruby 2.3.1/Rails 4.2.5.1升级到Rails 5.0.0.1,在为以下控制器运行控制器规范时遇到一个奇怪的错误:

在我的控制器中,我有以下代码:

class Api::InboundSmsCallbackController < ActionController::Base
  include Api::SmsCallbackHelpers
  include Api::ServiceErrorHelpers

  # GET    /inbound_sms_callback/alert_acknowledgement(.:format)
  def alert_acknowledgement

    ....
    ...

    params.merge!({
      acknowledger_user_id: acknowledger_user.id,
      alert_id: alert.id,
      acknowledgement_time: sms_sent_at
    })

    begin
      creation_service = AcknowledgementAlert::CreationService.new(params)
    rescue ServiceError => se
      render json: json_hash, status: status
      return
    end

    ....
    ...

    render json: json_hash, status: 200
  end

end

我以以下方式将参数传递给我的服务类:

creation_service = AcknowledgementAlert::CreationService.new(params.to_unsafe_h)
但是,当我运行spec示例时,这个更改失败了,错误是

 NoMethodError:
   undefined method `merge' for nil:NilClass
错误跟踪指向我进行更改的行:

    params = params.merge({
      acknowledger_user_id: acknowledger_user.id,
      alert_id: alert.id,
      acknowledgement_time: sms_sent_at
    })
这非常奇怪,因为我在计算该语句之前尝试打印
params
,并且打印了一个对象:

  >>>>>>>>>>>. params: <ActionController::Parameters {"message-timestamp"=>"2016-10-06 12:35:15 UTC", "msisdn"=>"919845128956", "text"=>"S3e9a6cE", "to"=>"12547836910", "controller"=>"api/inbound_sms_callback", "action"=>"alert_acknowledgement"} permitted: false>
它被执行,我的规范示例通过

我不明白为什么
params=params.merge
不起作用

有人知道是什么导致了这种奇怪的行为吗

我试过的另一件事是:

params = params

ackn_params = params.merge({
  acknowledger_user_id: acknowledger_user.id,
  alert_id: alert.id,
  acknowledgement_time: sms_sent_at
})
现在它失败了,出现了同样的错误

 undefined method `merge' for nil:NilClass 
因此,重新分配到
params
似乎是这一现象背后的根本原因。如果这听起来是正确的,那么是否有任何特定的原因导致
params
无法重新分配,因为
ActionController::Parameters\merge(其他散列)
方法说

  Returns a new ActionController::Parameters with all keys from other_hash merges into current hash.

谢谢。

我想,这应该对您有所帮助:

params = params.permit(:values, :from, :params).to_h.merge({
      acknowledger_user_id: acknowledger_user.id,
      alert_id: alert.id,
      acknowledgement_time: sms_sent_at
})

Params为零。您不能对不存在的内容进行.merge.permit。确保先将参数初始化为对象。

谢谢。我更关心的是为什么
params=params.merge
在计算
params.merge
时抱怨params为
nil
。“那真是令人费解。”吉格涅什高尔说
 undefined method `merge' for nil:NilClass 
  Returns a new ActionController::Parameters with all keys from other_hash merges into current hash.
params = params.permit(:values, :from, :params).to_h.merge({
      acknowledger_user_id: acknowledger_user.id,
      alert_id: alert.id,
      acknowledgement_time: sms_sent_at
})