2012-03-01 148 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