Rails的路径变量
问题描述:
如果我在我的Rails以下航线的routes.rb文件:Rails的路径变量
get "time_track/check_in"
会有什么路径变量是我可以在我的看法使用?我假设像time_track_check_in_path
或check_in_time_track_path
。然而,无论这些工作:
<%= link_to 'Check-in', check_in_time_track_path %>
<%= link_to 'Check-in', time_track_check_in_path %>
答
当提供一个动词路线RouteSet
会做出最合理的猜测控制器/动作和辅助方法名。它在匹配路径中至少需要2段,否则必须自己提供控制器,操作和帮助程序名称。
对于单个段匹配器(路径中没有斜线),需要完整定义。
# Looks for FooController#index and provides foo_path/foo_url
get 'foo', :to => 'foo#index', :as => :foo
对于具有两个或更多个片段它将假定下面的语法匹配。
# Looks for FooController#bar and provides foo_bar_path/foo_bar_url
get 'foo/bar'
# Looks for Baz::FooController#bar and provides baz_foo_bar_path/baz_foo_bar_url
get 'baz/foo/bar'
有一点需要注意的是,此行为与资源匹配程序有关的路径帮助程序名称不同。使用这种语法提供了namespace_controller_action,其中使用资源和名称空间提供了action_namespace_controller,这可能是两种格式之间的一些混淆所在。
例如,如果你有时间的轨道资源已经那么你将它添加像这样:
# Provides /time_track/check_in as check_in_time_track_path mapping to TimeTrackController#check_in
resources :time_track do
collection do
get :check_in
end
end
是什么'耙routes'说一下吗? – slhck 2013-03-19 21:15:57
它应该是第二个,你会得到什么错误? – Zippie 2013-03-19 21:22:46
我一定是犯了一个错误,@Zippie,你是对的。 @slhck,这有助于向我确认它是'time_track_check_in_path',所以我再次尝试了它,并且它工作了......我一开始就输错了它...... – 2013-03-19 21:26:50