2012-03-01 151 views
0

我有非常有趣的场景:Rails 3中嵌套路由

我指定了两个控制器,一个为全球事件和另一个另一曾经为公司的具体事件。在路线,它被指定这样的:

resources :companies do 
    resources :events 
end 
resources: events 

运行rake路由我可以看到正在生成的路由:

events GET /events(.:format) events#index 
company_events GET /companies/:company_id/events(.:format) events#index 

两个路径似乎路由到相同的控制器(全球的).. 。 我有第二控制器根据控制器/公司,是这样的:上面

class Companies::EventsController < ApplicationController 
# stuff 
end 

它从不路线在控制器,无论我用company_evens_pat H(@company)。总是去另一个。 它应用于轨道2.3为我工作,我目前使用的3.2

+0

你确定你需要一个单独的控制器,似乎要保持干燥,你应该只在全局事件控制器的索引操作中抛出一个if params [:company_id]来仅显示那些事件。 – 2012-03-01 05:35:05

+0

这是根据您的路线按预期工作。都传递给EventsController和索引方法。如果您需要遵循不同的行为,则可以从单个控制器执行此操作。 – 2012-03-01 05:41:53

回答

2

好如上所述,我建议做这样的事情:

def index 
    if params[:company_id] 
    @events = Company.find(params[:company_id]).events 
    else 
    @events = Events.all 
    end 
end 

但如果你需要,你可以指定一个控制器:

resources :companies do 
    resources :events, :controller => "companies/events" 
end 
resources: events 

,只是建立一个企业你的控制器文件夹内的文件夹,把你的公司:: EventsController内

+0

这里是更多信息的文档http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use – 2012-03-01 05:58:27

+0

我想我将不得不这样做,如果我不找其他解。这将迫使我在控制器中手动呈现模板,这是相当......嗯。 – alexs333 2012-03-01 06:06:17

+0

哦,你没有想到这一点,你可以把你的模板放在共享文件夹中,然后链接到相同的部分 – 2012-03-01 06:08:52