我有一个复杂的模型,想要创建不同的屏幕进行编辑。作为一个愚蠢的例子,假设它是一个用户模型,一个屏幕允许您编辑名称,另一个屏幕编辑电话号码,另一个页面编辑用户的偏好。
为每个视图,路线等创建新动作,表单很容易,但诀窍是当你实际点击提交时,它会调用update
,然后......然后是什么?如果有错误,则应返回用于编辑模型的页面,而不是通用的“编辑”视图。即使成功,也可以回到调用更新的页面。
在会话中搞砸事情并不困难,但我总是怀疑“有更好的方法吗?”。
答案 0 :(得分:1)
我找不到比这更好的方法,并且急需这样做:
def edit
flash[:edit_user_return_to] = :edit
...
def other_edit
flash[:edit_user_return_to] = :other_edit
...
接着是
render(:action => flash[:edit_user_return_to] || :edit)
答案 1 :(得分:0)
您可以使用http referrer和URI解析功能来执行此操作。像
这样的东西redirect_to(URI.parse(request.env['HTTP_REFERER'][5]))
此行从请求中获取HTTP REFERER,并使用URI模块对其进行解析。引用路径应该是数组中的第6个元素。