2014-09-28 65 views
0

所以現在我有一個叫做鍛鍊和迴應的模型。在我的路線,我有日常鍛鍊的導軌路線

resources :exercise, param: :title do 
    resources :response 
end 

我試圖重寫URL,這樣當用戶訪問/每天的鍛鍊,它會彈出用於/exercise/:title/responses/new相同的觀點,但在瀏覽器的網址仍然會/daily-exercise。有沒有人知道一種方法來做到這一點?

編輯: 我忘了提及這一點,但日常鍛鍊的變化,所以我不得不URL映射到不同的動作,如exercises#daily_exercise

+0

標題的ID從哪裏來? – mccannf 2014-09-28 18:20:30

+0

我正在使用friendlyId gem向練習模型的列中添加一個slu and,並將標題用作slu。。因此,我找到如下練習,練習= Exercise.where(「slug =?」,params [:title])。然後,我得到id爲exercise.id – kchoi 2014-09-28 18:21:43

+0

是的,我明白這一點。但是當你去'/ daily-exercise'時,'params [:title]'不會存在。 – mccannf 2014-09-28 18:25:07

回答

0

創建一個映射到你的#show新的自定義路線在練習控制器中的動作:

get '/daily-excercise', to: ' responses#show' 

問題是你需要一種方法來拉入參數來鍛鍊一天。你可以通過編程來設置它,並且如果它在控制器中每天都在使用,那麼忽略ID。

before_filter :define_exercise, only: :new 

def define_exercise 
    if request.fullpath.match(/daily-exercise/) 
    @excercise = Excercise.find_by_exercise 
    else 
    @exercise.find(params[:title]) 
    end 
end 

正如提到的,如果您需要在ID傳遞作爲PARAM:

get '/:title/daily-excersise', to: 'responses#show' 

相反,創建另一個控制器動作#daily_exercise,但這不是很REST風格。

http://guides.rubyonrails.org/routing.html#singular-resources

+1

不正確。 @klchoi想要一個'新''響應',而不是'顯示'一個'練習'。 – mccannf 2014-09-28 18:31:11

+0

這並不完全清楚他想要什麼。我假設他想要練習#表演中的/ exercise /:title/responses/new view的部分表單 – Paul 2014-09-28 18:42:18