0

我有这些路线:

  map.resources :categories do |category|
    category.resources :sub_categories
  end

  map.resources :sub_categories do |sub_category|
    sub_category.resources :events
  end

这只是为了使 url 不必双重嵌套,我想将 url 保持在最多两个对象的深度。

问题是对于事件,我想要求 /sub_categories/:sub_category_id 作为 path_prefix,但使用

  map.resources :events, path_prefix => '/sub_categories/:sub_category_id'

给了我这样的路线

  event_path

我想拥有的是

  sub_category_event_path

因为任何时候用户想要访问 *sub_category*,我希望 url 要求提供 *category_id*,但是如果用户想要查看事件,则必须提供 sub_category_id。

4

2 回答 2

1

你是对的,它确实生成event_path,但这event_path需要一个:sub_category_id选项。要获得sub_category_event_path帮助,只需写一个:

class ApplicationController < ActionController::Base
  private
  def sub_category_event_path(sub_category, event) 
    event_path(event, :sub_category_id => sub_category)
  end
  helper_method :sub_category_event_path
end

不幸的是,如果你想要sub_category_event_url,你也必须写那个。

Rails 3 确实为您可能感兴趣的浅层路线提供了一些新的支持。考虑升级!

于 2011-02-06T04:57:36.893 回答
0

我只是设法让这个工作..但我将把它留在这里,希望人们投票支持@wuputah 建议的自定义助手,或者我的方法。

map.resources :events, :path_prefix => 'sub_categories/:sub_category_id', :name_prefix => 'sub_category_'

产生我正在寻找的路线..

于 2011-02-06T05:07:02.340 回答