【问题标题】:Rails path variablesRails 路径变量
【发布时间】:2013-03-19 21:09:47
【问题描述】:

如果我的 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 %>

【问题讨论】:

  • rake routes 对此有何评论?
  • 应该是第二个,你遇到什么错误?
  • 我一定是搞错了,@Zippie,你是对的。 @slhck,这有助于向我确认它是 time_track_check_in_path,所以我又试了一次,它成功了……我一开始肯定打错了……

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2012-12-13
    相关资源
    最近更新 更多