在多个位置使用表单 - 控制器应根据请求的来源重定向到不同的位置

时间:2011-09-19 22:53:17

标签: ruby-on-rails

我有一个表格来添加一名工作人员。

在按顺序创建帐户时,首先使用该表单,以帮助用户设置其帐户。

一旦帐户已经设置,它就会在不同的地方使用。

这两个使用不同的布局和控制器,因此具有不同的URL。但是,当提交表单时,它们当前都调用相同的控制器#create。现在,如果表单是从设置区域提交的,则应在调用create action后重定向到一个URL。如果从主应用程序UI(非安装程序)调用它,它应该转到不同的位置。

设置此内容的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

普遍的共识是实现一种方法,用于存储您希望在会话中返回的URL。例如,将网址存储在session[:return_to]中,并在控制器的操作中使用redirect_to session[:return_to]

显然,我正在简化这一点,你需要一些更强大的功能,包括在一个过滤器中,用于抽象session[:return_to]的管理。请参阅这些SO帖子以获取创意:

Redirecting from an update action to the referrer of the edit

Correctly doing redirect_to :back in Ruby on Rails when referrer is not available

或者,一种轻量级方法是简单地将重定向的目标URL添加为隐藏表单参数,例如hidden_field 'redirect_to', :value => foo_path(我的语法可能不正确)。您重复使用的操作只会redirect_to params[:redirect_to]

我在工作的路上考虑这个问题,并且必须有一个宝石,或者一些更好的“声明”方式来接近控制器动作重定向/渲染,以补充重用。我想不出任何现有的宝石。是时候创造?

答案 1 :(得分:0)

:后退符号是一个简单的答案:redirect_to :back

这里讨论更多深度: Correctly doing redirect_to :back in Ruby on Rails when referrer is not available