【问题标题】:Using form in multiple locations -- controller should redirect to different location depending on where the request came from在多个位置使用表单——控制器应该根据请求的来源重定向到不同的位置
【发布时间】:2011-09-19 22:53:17
【问题描述】:

我有一个表格可以添加工作人员。

当在视图序列中创建帐户时首先使用该表单,以帮助用户设置他们的帐户。

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

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

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

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    普遍的共识是实现一个方法来存储你想在会话中返回的 url。例如,将 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]

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

    【讨论】:

      【解决方案2】:

      :back 符号是简单的答案:redirect_to :back

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多