更改link_to使用的默认_path方法名称

时间:2012-08-31 21:38:55

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

我非常喜欢简短的link_to语法:

link_to "Ad", ad

但是默认情况下,尝试使用ad_path方法,因为它嵌套在杂志下面,因此不存在。正确的使用途径是magazine_ad_path

这仍然可以正常工作:

link_to "Ad", magazine_ad_path(ad)

但是我觉得调用magazine_ad_path是重要的,因为heirarchy是在我的路线中定义的。

ad belongs_to杂志和杂志has_many广告

知道如何更改路线或其他地方的默认方法吗?

短“pithier”语法是这里的第二个例子:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

编辑: 抱歉,我的网址结构不清楚。它需要是/ magazine / 5 / ad / 12。我知道杂志的id在技术上是不需要的,因为广告中有外键,但这就是他们想要的URL。

继承我的routes.rb

MyApp::Application.routes.draw do
  resources :magazines do
    resources :ads do
      member do
        get :info, :preview, :send, :fetch
        put :publish
      end
    end
  end
end

2 个答案:

答案 0 :(得分:0)

您可以在命名空间资源中编写如下链接:

link_to "Ad", [:magazine, ad]

或者如果它是嵌套资源:

link_to "Ad", [magazine, ad]

答案 1 :(得分:0)

有一个:作为路线定义的选项:

resources :magazines do
  resources :ads, :as => :ads
end

可以做这项工作。

修改

检查情况后,上述答案将无效。或者,您可以将resources :ads添加到routes.rb(除了您已经拥有的嵌套声明之外)。