【问题标题】:Overloading a route one and two variables in Rails 4在 Rails 4 中重载路由一和二变量
【发布时间】:2017-03-30 22:13:18
【问题描述】:

我最近在我们的一个旧应用上从 rails 3 升级到 rails 4,问题是 rails 4 不允许两个 URL 使用相同的路径名,即使它们采用不同数量的参数。

例如我们曾经这样做过:

  get "object/:id/data/:dataid" => "object#data", as: :object_data
  get "object/:id/data/:dataid/:extra" => "object#data", as: :object_data

但在 rails 4 中不允许有两个 object_data_paths。我想完成和以前一样的事情。似乎一种方法是将第二种方法称为新方法,但使用相同的方法,即:

get "object/:id/data/:dataid/:extra" => "object#data", as: :object_data_extra

但这似乎是一个比以前更糟糕的解决方案。我还有其他方法可以做到这一点吗?关于我们为什么必须这样做的想法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 routes


    【解决方案1】:

    有两种解决方案。第一种是使用可选的路径段:

    get "object/:id/data/:dataid(/:extra)" => "object#data", as: :object_data
    

    另一种是将其包装在一个助手中:

    get "object/:id/data/:dataid"        => "object#data", as: :object_data_1
    get "object/:id/data/:dataid/:extra" => "object#data", as: :object_data_2
    
    # And in application_helpers.rb or somewhere similar
    
    def object_data_path(id, dataid, extra=nil)
      if extra
        object_data_2_path(id, dataid, extra)
      else
        object_data_1_path(id, dataid)
      end
    end
    

    【讨论】:

    • 太棒了!感谢您让我知道这两种解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多