ruby 从Rails 6.0升级到Rails 6.1后,URL /路径助手无法工作

uz75evzq  于 2023-05-06  发布在  Ruby
关注(0)|答案(1)|浏览(99)

在升级到Ruby 3.0.6以及随后的Rails www.example.com之后6.1.7.3,我们在视图中使用的所有URL帮助程序都出现了问题。
他们都失败了,错误是:

ActionView::Template::Error:
       wrong number of arguments (given 4, expected 0..1)
     # /home/rails/.rvm/gems/ruby-3.0.6@app/gems/actionpack-6.1.7.3/lib/action_dispatch/routing/url_for.rb:170:in `url_for'

唯一的补救方法是显式地将Rails.application.routes.url_helpers添加到每个helper中,但这很难处理,因为项目很大。
(for示例root_path变为Rails.application.routes.url_helpers.root_path
我四处寻找,没有找到任何有用的东西。有什么人能帮忙的吗?

kpbwa7wx

kpbwa7wx1#

我发现错误是由ActionDispatch::Routing::RouteSet调用路由的方式产生的。
不知道这是否有效,但它产生了一个功能性的结果,所以我在这里发布。
我创建了一个模块覆盖来挽救错误的行为:

ActionDispatch::Routing::RouteSet::NamedRouteCollection::UrlHelper.module_eval do

  def call(t, method_name, args, inner_options, url_strategy)
    controller_options = t.url_options
    options = controller_options.merge @options
    hash = handle_positional_args(controller_options,
                                  inner_options || {},
                                  args,
                                  options,
                                  @segment_keys)
    begin
      t._routes.url_for(hash, route_name, url_strategy, method_name)
    rescue
      # this fixes the behaviour for views
      t._routes.url_for(hash)
    end
  end

end

相关问题