【问题标题】:Route params require arguments to be passed to the action路由参数需要将参数传递给操作
【发布时间】:2019-11-10 14:07:42
【问题描述】:

我的 routes.rb 文件中有以下代码 -

post "/webhooks/process/:webhook_source", controller: :webhooks, action: :process

预期它会将webhook_source 作为参数传递给操作。

这是行动 -

  def process(webhook_source)
    puts "========="
    puts webhook_source
    puts "========="
    case params[:webhook_source]
    when 'razorpay'
      process_razorpay(params)
    end
    head :ok
  end

如果我没有参数 webhook_source,我会收到错误 -

ArgumentError (wrong number of arguments (given 1, expected 0)):

Here 也是完整的堆栈跟踪供参考。

webhook_source 的 put 只返回 process

我不确定如何摆脱我认为多余的论点。

【问题讨论】:

  • 您能否还包括错误的堆栈跟踪?应该真的不需要webhook_source 参数。
  • @edariedl - 这是堆栈跟踪 - pastebin.com/T3eu2srT
  • 这很奇怪,没有它应该可以工作。你能分享你的控制器的完整代码吗?

标签: ruby-on-rails actioncontroller


【解决方案1】:

这是因为语法错误,因为继承 ActionController 的类中的方法不能拥有自己的方法参数。你的process 方法应该是

def process 
    puts "========="
    puts params[:webhook_source]
    puts "========="
    case params[:webhook_source]
    when 'razorpay'
      process_razorpay(params)
    end
    head :ok
 end

更新:

问题在于方法的名称。 processAbstractController#Base 使用的关键字。用不同的名字定义方法不是关键字就能解决问题。

【讨论】:

  • 只有当我有没有参数的代码时我才会收到错误。我必须包含参数才能让它消失..
  • 可能您应该为该方法使用不同的名称。 process 可以是 rails 中的关键字
  • @sureshprasanna70 很好。你是正确的process 是由 rails github.com/rails/rails/blob/master/actionpack/lib/… 定义的方法,它被控制器中的操作方法覆盖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 2018-08-14
  • 2017-07-31
  • 2020-02-06
相关资源
最近更新 更多