1

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

get "time_track/check_in"

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

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

1 回答 1

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
于 2013-03-19T21:26:45.403 回答