代码之家  ›  专栏  ›  技术社区  ›  Dan Harper

有条件重定向的最佳方法?[闭门]

  •  6
  • Dan Harper  · 技术社区  · 17 年前

    我想知道根据用户点击的链接,将用户重定向回正确位置的最佳方式是什么。例如:

    1. 列出所有用户
    2. 在列表中的用户上单击“编辑”

    例2:

    1. 用户可以位于应用程序中的任何页面上,导航栏显示编辑当前用户的链接
    2. 用户单击表单上的“保存”,控制器将重定向回用户单击导航栏中的“编辑”链接时所处的任何页面。

    我在过去看到过:

    1. 将参数放置在原始编辑链接上,该链接显示在原始控制器/操作中。要使其更干燥,可以在助手中使用@controller.controller\u name和@controller.action\u name。
    2. 控制器将参数保存到会话变量中。

    我不太喜欢这个解决方案的地方是需要将参数添加到视图中的每个适用链接中。我想知道是否有一种方法可以将这些都构建到控制器中。

    我想的一个更好的方法是:

    1. 在“编辑”操作上放置一个before_过滤器,将推荐人(这足够可靠吗?)保存到会话中。
    2. 当点击“更新”时,控制器将重定向到会话变量,然后删除会话变量。

    你有没有想过最好的方法?

    3 回复  |  直到 17 年前
        1
  •  2
  •   Patrick McKenzie    17 年前

    闪光 :仅用于下一个请求的数据可以存储在闪存中。那么你就不必去自动清除它了。它适用于有限的应用程序上下文,您肯定只需要一次,而不仅仅是错误消息!

    :如果你只需要将人们重定向到他们所在的最后一个URL,那么就这样做。对于大多数不屏蔽信息的浏览者来说,request.referer将为您提供此人所在的最后一个URL。

    #in edit controller
    ...
    flash[:page_to_redirect_to] = request.referer || "/my/default/path"
    ...
    
    #in save controller
    redirect_to flash[:page_to_redirect_to] || "/my/default/path"
    

    前过滤器 :我看到很多Rails开发人员将此作为他们最喜欢的锤子,并将其他一切都变成钉子。当您希望向控制器中的所有或基本上所有方法公开功能时,过滤器非常有用。我不知道这里一定是这样,但你的里程数可能会有所不同。如果保证,您可以将过滤器与上述两种技巧结合使用。

        2
  •  1
  •   Toby Hede    17 年前

    推荐人应该足够可靠。。。如果没有可用的参考者(比如:有人在编辑页面上添加了书签),只需设置一个默认值,就可以了。

        3
  •  0
  •   DGM    15 年前

    另一种方法是在覆盖中加载表单,如 http://flowplayer.org/tools/overlay/index.html ,然后在ajax submit上关闭覆盖。我结合自动完成来提供“添加新”选项。提交覆盖表单后,我将返回一些json格式的数据,并根据这些数据填充自动完成。)我自己做的 plugin (帮助完成所有这些)

    这需要做更多的工作,但对最终用户来说确实很好。

    推荐文章