Rails路径变量

时间:2013-03-19 21:09:48

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 routes link-to

如果我的Rails routes.rb文件中有以下路由:

get "time_track/check_in"

我可以在视图中使用路径变量是什么?我假设time_track_check_in_pathcheck_in_time_track_path。但是,这些都不起作用:

<%= link_to 'Check-in', check_in_time_track_path %>
<%= link_to 'Check-in', time_track_check_in_path %>

1 个答案:

答案 0 :(得分:0)

当提供动词路由时,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