在rails应用程序中,我有一个特殊的URL(/ profile),我正在映射到用户控制器,以允许用户查看和编辑他们的个人资料。我在路由文件中输入了以下条目,以便配置文件的“get”将我引导到用户控制器中的配置文件操作,配置文件的“post”将路由到用户控制器中的update_profile操作。
match '/profile', :to => 'users#profile', :via => "get"
match '/profile', :to => 'users#update_profile', :via => "post"
如果我运行rake路线,我会看到以下两个条目
profile GET /profile(.:format) {:controller=>"users", ":action=>"profile"}
profile POST /profile(.:format) {:controller=>"users", ":action=>"update_profile"}
如果我尝试点击开发网址http://localhost:3000/profile,则会按预期显示个人资料页面。如果我按下表单按钮,则会出现以下错误:
Routing Error
No route matches "/profile"
查看初始页面上生成的html,我看到以下表单标记,因此似乎操作已正确设置。
<form accept-charset="UTF-8" action="/profile" class="edit_user" enctype="multipart/form-data" id="edit_user_1" method="post">
那我错过了什么?通过查看rake路由输出,我假设这将按原样工作。我是否错误地考虑了我的http动词?任何帮助将不胜感激。
答案 0 :(得分:0)
我在这里看到一些问题。
首先,这些是针对特定用户的操作。所以路线应该是'profile/:id'
其次,在托管资源时会自动生成显示和更新。重命名操作并将其映射到自定义URL有什么好处?打破自动生成的Rails RESTful路由经常会遇到麻烦。它可以做到,但你应该有充分的理由去做。
第三,你的路线对我来说很有趣。他们不应该有一些引用。它是你在运行rake路线时它们在你的控制台中的显示方式吗?