【问题标题】:Render different template based on where request was called from?根据调用请求的位置呈现不同的模板?
【发布时间】:2009-11-06 04:48:35
【问题描述】:

我正在调用控制器操作以使用来自 2 个不同页面的 AJAX 请求进行搜索,并希望根据请求该操作的页面呈现不同的 rjs 文件。我可以只做 2 个操作来执行此操作,但是当操作中的相同代码只需要不同的 rjs 因为它在视图中以不同方式显示搜索结果时,它看起来并不十分干燥。

使用 Rails 2.3.4 和 Ruby 1.8.7

【问题讨论】:

    标签: ruby-on-rails ruby xmlhttprequest


    【解决方案1】:

    如果我正确理解您的问题,我想到了三种解决方法:

    1. 在您的操作中,检查当前请求的http_referrer 并尝试找出发起请求的页面。根据您设置路由的方式,这可能有效,也可能无效,但它确实具有操作非常简单的优点。
    2. 让您的 AJAX 请求包含一个额外的 GET 参数,以识别请求来自哪个页面。然后,对该参数进行 Rails 操作测试,并相应地渲染 RJS。
    3. 利用路由做一些巧妙的事情,让页面 A 从一个不同的 URL 中执行操作,而页面 B 从另一个 URL 中执行操作,并在路由配置中包含页面标识参数。

    我更喜欢方法#2,因为当你的路由发生变化时,它似乎不太可能随机中断,而#3 让我觉得过于复杂。可能还有一百万种其他方法可以做到这一点,但这些都是一开始就想到的三种方法。希望对您有所帮助...

    【讨论】:

    • #2 通常是最快和最简单的。
    • 谢谢,#2 似乎是一个合理的解决方案
    【解决方案2】:

    操作中有多少代码?您可以将其分解为一个公共子例程并从每个操作中调用它。这将使代码保持简单易懂,而无需使用巧妙的技巧。

    【讨论】:

      【解决方案3】:

      我通常喜欢史蒂文回答中的#2,但有一点不同。我的 ApplicationController 中的过滤器赋予了与额外参数相对应的自定义 mime 类型。

      这样,我的视图文件的名称更清晰(即:“show.employees-autocomplete.rjs”、“show.quotation-autofill.rjs”)。

      【讨论】:

        猜你喜欢
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 2019-08-31
        • 2010-12-08
        • 1970-01-01
        • 2018-01-01
        • 2010-10-25
        相关资源
        最近更新 更多