我有一个复杂的模型,想创建不同的屏幕来编辑它。举个愚蠢的例子,假设它是一个用户模型,一个屏幕让您编辑姓名,另一个屏幕编辑电话号码,另一个页面编辑用户的偏好。
为每个视图创建新动作、表单、路由等很容易,但诀窍是当您实际点击提交时,它会调用update
,然后......然后呢?如果有错误,它应该返回用于编辑模型的页面,而不是通用的“编辑”视图。即使成功,返回调用更新的页面也可能会很好。
用会话破解一些东西一点也不难,但我总是想知道“有没有更好的方法?”。
我有一个复杂的模型,想创建不同的屏幕来编辑它。举个愚蠢的例子,假设它是一个用户模型,一个屏幕让您编辑姓名,另一个屏幕编辑电话号码,另一个页面编辑用户的偏好。
为每个视图创建新动作、表单、路由等很容易,但诀窍是当您实际点击提交时,它会调用update
,然后......然后呢?如果有错误,它应该返回用于编辑模型的页面,而不是通用的“编辑”视图。即使成功,返回调用更新的页面也可能会很好。
用会话破解一些东西一点也不难,但我总是想知道“有没有更好的方法?”。
我找不到比这更好的方法了,需要赶紧做:
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)
您可以使用 http 引荐来源网址和 URI 解析功能来执行此操作。就像是
redirect_to(URI.parse(request.env['HTTP_REFERER'][5]))
此行从请求中获取 HTTP REFERER,并使用 URI 模块对其进行解析。引用路径应该是数组中的第 6 个元素。