1

我真的很喜欢简短的 link_to 语法:

link_to "Ad", ad

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

这仍然可以正常工作:

link_to "Ad", magazine_ad_path(ad)

但我觉得调用 magazine_ad_path 是多余的,因为层次结构是在我的路线中定义的。

广告属于_to 杂志和杂志 has_many 广告

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

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

编辑:对不起,我不清楚我的 URL 结构。它必须是 /magazine/5/ad/12。我知道由于 Ad 中的外键,技术上不需要杂志的 id,但这就是他们想要的 URL。

这是我的路线.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
4

2 回答 2

0

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

link_to "Ad", [:magazine, ad]

或者,如果它是嵌套资源:

link_to "Ad", [magazine, ad]
于 2012-08-31T22:13:27.767 回答
0

您的路线定义有一个 :as 选项,因此:

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

可以做这项工作。

编辑:

检查情况后,上面的答案是行不通的。或者,您可以只添加resources :ads到您的 routes.rb (除了您已经拥有的嵌套声明)。

于 2012-08-31T23:06:56.440 回答