我似乎无法弄清楚如何让我的路线设置正确。如何在控制器仅编辑和更新时设置路由?
在我的应用程序中,我有一个让网站所有者更新其地址信息的视图。 新和创建行动是注册过程的一部分,位于signups_controller
。 编辑和更新行动在settings_controller
。
当用户进入设置区域时,他/她只能看到编辑表单。填写后,用户将返回到相同的表单,并显示一条Flash消息或错误消息。 这里是控制器的样子:
class SettingsController < ApplicationController
def edit
@account = current_account
@account.companies.first
@account.companies.first.addresses.first
@account.companies.first.phones.first
end
def update
@account = current_account
if @account.update_attributes(params[:account])
redirect_to edit_setting_path
flash[:notice] = "Success!"
else
render :edit
end
end
end
在我的路线,我只是有:
resources :settings
链接到这方面的网站的是一个基本的REST风格的命名临客,与该参数选项:
edit_setting_path(:id => current_account.id)
当用户到达这个页面,他们看到了以下网址:
http://domainname.com/settings/1/edit
当他们提交表单,并得到错误的URL更改为:
http://domainname.com/settings/1
为什么网址改变 - 我宁愿不呢?有没有办法让它保持与初始编辑视图相同?我试过对失败的更新做重定向,但是我没有收到错误消息。
任何想法?
无论如何要保持错误,但避免更改URL? – Nathan 2012-04-18 17:45:29
是的,最后一段。虽然我会把它称为一种黑客。 – miked 2012-04-18 17:46:52
是的,这是诀窍。但它似乎并不罕见 - 我错了吗?另外,如果我使用AJAX的形式,这是否也解决了这个问题? – Nathan 2012-04-18 18:08:05