在导轨,用于不同的路线助手的名字应该是不同的。因此,正如你理解的那样,如果你为两条不同的路线使用相同的助手名字(例如你的案例中的'profile'),你会收到一个错误。
Rails中的这个限制有助于在您的routes.rb文件以及您的应用程序中保持完整性。例如考虑两种方式,一种是控制器:
class XyzController < ApplicationController
def method_a(param1)
end
def method_b(param1)
end
end
在你的路由文件,如果没有保持帮手名不同的限制,你也可以使用:
get 'xyz/method_a', to: 'profile#method_a', as: 'profile_method'
get 'xyz/method_b', to: 'profile#method_b', as: 'profile_method'
相应的,在您的视图文件:
link_to 'link_1', profile_method_path('param1') #intended to route for method_a
link_to 'link_2', profile_method_path('param2') #intended to route for method_b
显而易见,在视图文件中,不仅难以确定哪种路由适用于哪种方法,也不可能路由到任何其他控制呃使用助手'profile_method'的方法,除了首先在你的routes.rb文件中使用这个助手的方法(因为路由是按顺序读取的)。
希望这会有所帮助:)
为什么不将“slug”参数定义为可选项,然后您可以将两者合并?当然,在控制器中有一些逻辑。我认为你提到的错误有一个理由,显然这两个行为是针对不同的事情的,为什么他们必须有相同的名字? – 2014-11-05 18:23:19