我的rails应用程序中有以下路线
match '/settings', to: 'Users#edit', as: 'settings'
以及对应的控制器代码
def edit
@user = current_user
end
def update
correct_user
@user = User.find(params[:id])
if !@user.authenticate(params[:old_password])
flash[:error] = 'Old password did not match'
redirect_to settings_path
elsif @user.update_attributes(params[:user])
flash[:success] = "Settings updated"
redirect_to settings_path
else
render 'edit'
end
end
我的编辑页面现在只是一个密码更改页面,当我访问时,/settings
我看到了我想要排除的页面。当 Iredirect_to settings_path
时, url 仍然存在/settings
,这是我想要的行为。
在我的edit
模板中,我有代码来处理对象错误并将它们呈现在页面上。时render 'edit
,如果存在对象错误,则触发此代码。但是,如果我重定向到该页面,则代码不存在。所以我需要打电话render 'edit'
查看错误。
但是,调用render 'edit'
会导致 URL 更改为/users/:id/edit
,这正是我不想要的。我希望 URL/settings
在调用后保留render 'edit'
。我怎样才能做到这一点?
注意:我已经搜索过 SO 和互联网的其他部分,但没有找到适合我需要的内容。有一两个类似问题的 SO 主题,但它们都使用闪烁和 hacky 基于重定向的解决方法,这不是我想要的。