铁路布线模糊

时间:2014-07-29 08:12:13

标签: ruby-on-rails routing

之间存在差异:

http://localhost:3000/courses/edit.2
and 
http://localhost:3000/courses/edit?id=2

由<%= edit_courses_path(course)%>

生成

和link_to({action :: edit,id:course.id})分别

http://localhost:3000/courses/edit.2 # This link does not work
http://localhost:3000/courses/edit?id=2 # This link works

如何使这两个链接都有效?

2 个答案:

答案 0 :(得分:5)

也不是Rails resourceful route。将通过以下方式实现资源丰富的编辑路线:

resources :courses

然后您可以使用自动生成的路径助手(使用rake routes查看)来创建链接:

<%= link_to "Edit course", edit_course_path(course) %>

例如,生成/courses/2/edit的链接,params[:id]设置为2.请注意edit_course_path中与edit_courses_path相比的单数。

您的版本生成/courses/edit.2的原因是因为没有动态细分的路径助手会将第一个参数作为格式,因此您要告诉它格式为&#34; 2&# 34; (与xml,json,pdf等相反)。

答案 1 :(得分:0)

<强>路线

根据经验,每次创建路线时,建议您使用Rails route path helpers(与edit_courses_path一样)

您遇到的问题(使用/edit.2)很可能是您的路线未正确定义(因此Rails只会将对象的ID附加到网址的末尾

-

您需要了解Rails' routes are resource-orientated

这意味着每条&#34;路线&#34;你创建应该基于&#34;资源&#34; (数据对象),这就是Rails路由结构推荐使用resources :controller指令的原因:

enter image description here


您的代码

要解释您的问题,如果您没有edit路线,那么您通常会遇到edit.2问题。解决方案是确保在路线中使用resources :courses

#config/routes.rb
resources :courses #-> will create domain.com/courses/2/edit

下一步是确保您能够正确调用路由,最好通过使用$ rake routes命令查看路由来完成 - 这将为您提供正确的使用路径