【问题标题】:url_for and route defaults in Rails 3Rails 3 中的 url_for 和路由默认值
【发布时间】:2011-03-15 22:14:35
【问题描述】:

我有一个 Rails 路线设置如下:

match ':controller/:id/:action'
# match 'teams/:id' => "teams#show" # doesn't have any additional effect, which makes sense to me
resources :teams, :only => [:index, :show]

这样我可以说/teams/cleveland-indians,它会用:id => 'cleveland-indians' 调用teams#show。效果很好。我的问题是url_for 并没有完全按照我的意愿行事。在我的视图/团队/索引视图中,我得到了这种行为:

url_for(:id => "cleveland-indians") # => /teams/cleveland-indians/index
url_for(:id => "cleveland-indians", :action => :show) # => /teams/cleveland-indians/show

当然,第二个的行为方式是我想要的,但我想最后去掉不必要的/show。我不太了解这些助手是如何工作的,但我猜它会知道show 是具有指定 id 的 GET 的默认操作,与路由引擎相同。无论如何,对我来说最好的方法是什么?还是我做错了?

【问题讨论】:

    标签: ruby-on-rails rails-routing


    【解决方案1】:

    'resources' 行应该已经为您提供了您可能想要的路线,因此您可以删除第一个 'match' 行。

    请注意,您也可以使用 'teams_path'、'team_path("cleveland-indians")' 代替 'url_for'。

    【讨论】:

    • 删除资源行会停止指向我的非 RESTful 操作的链接,例如link_to(name, :action => 'other_action') 给我一个错误。问题真的是我将 RESTful 资源与非 RE​​STful 路由混合在一起吗?
    • 那么您可以使用资源的集合/成员操作:resources :posts do get :other_action, :on => collection end 或将您的“匹配”行移到路由文件中的“资源”下方
    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多