Rails双重嵌套路由,分解

时间:2011-02-06 04:46:59

标签: ruby-on-rails routes nested-routes

我有这些路线:

  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。

2 个答案:

答案 0 :(得分: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确实对您可能感兴趣的浅路线有一些新的支持。考虑升级!

答案 1 :(得分:0)

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

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

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