在Rails 4中重载路由一和两个变量

时间:2017-03-30 22:13:19

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

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

E.g。我们曾经这样做过:

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

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

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

但这似乎比以前更糟糕的解决方案。我可以用其他任何方式吗?关于我们为什么要这样做的想法?

1 个答案:

答案 0 :(得分:2)

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

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