2014-09-28 69 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