仅包含命名参数的方法中的ArgumentError

时间:2017-07-27 06:56:44

标签: ruby-on-rails ruby

我的方法很奇怪,只有命名参数。

class MyConsumer < ...

  def method1(params)

    method2(params.slice(:a,:b))        
  end

  def method2(a:, b:)
    # do something
  end

end

我有针对method1的测试,并且工作正常。但是在制作时我得到ArgumentError: wrong number of arguments (given 1, expected 0)例外。

我尝试添加

params = params[0] if params.instance_of?(Array)

作为method1的第一行,认为它是使用数组而不是哈希调用的,但这没有帮助。

有关为什么在某些情况下调用带有hash.slice的方法2并且不在其他情况下的方法的任何见解?

1 个答案:

答案 0 :(得分:5)

ActionController::Parameters#slice返回ActionController::Parameters个实例,而不是哈希值。它像哈希一样嘎嘎叫,但它不是哈希值,因此无法按原样传递给方法,期待双重splat。

在传递之前明确地调用to_hash

method2(params.permit(:a,:b).to_hash) 

请查看以下评论​​,了解其为permit,而不是slice。积分给@SimpleLime。