根据调用请求的位置渲染不同的模板?

时间:2009-11-05 18:15:13

标签: ruby-on-rails ruby xmlhttprequest

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

使用Rails 2.3.4和Ruby 1.8.7

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题,可以通过三种方式来解决这个问题:

  1. 在您的操作中,检查当前请求的http_referrer并尝试找出发起请求的页面。根据您设置路由的方式,这可能会或可能不会起作用,但它确实具有非常简单的优势。
  2. 让您的AJAX请求包含额外的GET参数,以确定请求来自哪个页面。然后,对该参数进行Rails操作测试,并相应地渲染RJS。
  3. 使用Routes做一些聪明的事情并让页面A从一个不同的URL点击操作,页面B从另一个URL点击操作,并在路由配置中包含页面标识参数。
  4. 我倾向于方法#2,因为当你的路由改变时,似乎不太可能随意破坏,#3让我觉得过于复杂。可能还有一百万种其他方法可以做到这一点,但这些是三种让人想到的。希望有所帮助...

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我通常喜欢史蒂文的回答#2,但有一点扭曲。 ApplicationController中的过滤器属性对应于额外参数的自定义mime类型。

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