2012-07-09 98 views
1

我正在尋找爲我的應用設置路由的最佳方式。RESTFUL路由使用相同的頁面

該應用程序允許用戶註冊,發佈作業和申請作業。我遇到的問題是,應該真正顯示不同的東西的兩條路線連接到相同的頁面。

我的路線如下:

resources :users do 
    resources :apps 
end 

resources :jobs do 
    resources :apps 
end 

由於這個我結束了兩個路徑結果:

users/id/apps 
jobs/id/apps 

我想什麼做的是使用第一個路徑中可顯示工作用戶已完成的應用程序。然後,我想使用第二條路徑向作業所有者顯示他們爲該作業收到的應用程序。

我遇到的問題是兩個路徑最終在apps#index

任何建議人們可以在如何以最佳路線,這將是非常感謝提供! :)

回答

2

這兩條路徑都可能適用於您想要做的事情。當一個請求進入

users/:user_id/apps

,那麼你就可以做這樣的事情在你的控制器來填充應用程序列表:

@apps = User.find_by_id(params[:user_id]).apps 

而在其他路徑的情況下, ,你會做同樣的事情,但params[:jobs_id],例如

@apps = Job.find_by_id(params[:job_id]).apps 

在你的控制器,你將有一個建立取決於@apps哪條路徑請求經由排在一些有條件的代碼(通過尋找,看看:USER_ID或:JOB_ID是PARAMS)......這樣的事情:

if params[:user_id] 
    @apps = User.find_by_id(params[:user_id]).apps 
elsif params[:job_id] 
    @apps = Job.find_by_id(params[:job_id]).apps 
end 

也許重構爲...

if params[:user_id] 
    @user = User.find(params[:user_id]) 
    @apps = @user.apps 
elsif params[:job_id] 
    @job = Job.find(params[:job_id]) 
    @apps = @job.apps 
end 
+0

嗨,埃德,感謝您的回覆,這是非常有益的。如果你能提供一個我將如何檢查傳入請求的參數的例子,那將是非常好的。我猜這將是某種'ifels'聲明,但我不確定如何構造它?再次感謝! :) – 2012-07-09 16:40:05

+0

用條件代碼編輯答案 – edralph 2012-07-09 20:52:17

+0

非常感謝!這工作:) – 2012-07-10 07:08:11

1

如果使用「資源」的關鍵字,鐵軌將映射到缺省路由。
如果你想特定的路線映射到其他東西,你應該考慮使用「匹配」。
例如:

match "users/id/apps" => "users/id/apps" 
match "jobs/id/owners" => "jobs/id/owners" 

此頁面顯示的是一個更加詳細的用法:http://guides.rubyonrails.org/routing.html
您也可以將路線更改爲某個或代碼本身的選項。
希望有所幫助。

+0

感謝您的幫助Linx,在這個場合,我認爲能夠在控制器中定義它是最好的,只是因爲我試圖儘可能'平靜'。雖然這仍然非常有用! :) – 2012-07-09 16:43:16