之间存在差异:
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
如何使这两个链接都有效?
答案 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
指令的原因:
您的代码
要解释您的问题,如果您没有edit
路线,那么您通常会遇到edit.2
问题。解决方案是确保在路线中使用resources :courses
:
#config/routes.rb
resources :courses #-> will create domain.com/courses/2/edit
下一步是确保您能够正确调用路由,最好通过使用$ rake routes
命令查看路由来完成 - 这将为您提供正确的使用路径