我最近在我们的一个遗留应用程序上从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
但这似乎比以前更糟糕的解决方案。我可以用其他任何方式吗?关于我们为什么要这样做的想法?
答案 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