我有这些路线:
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。
答案 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_'
生成我正在寻找的路线..