Rails - 存储搜索查询/结果

3
我有一个搜索页面可以找到候选人。从这个页面,您可以点击“查看”以查找有关候选人的更多信息。在候选人视图上,您可以单击“编辑”或执行其他一些操作,这将使您回到候选人视图。
我的问题是,从候选人视图开始,我需要添加一个按钮来返回搜索结果。最初我想使用JS按钮和history -1,但由于用户可以从视图内部执行其他操作,因此这种方法行不通。
我还不太了解Rails,所以不确定我的选择...我正在考虑对结果进行某种缓存,然后可能使用隐藏字段来跟踪缓存的位置(我认为这不是最好的解决方案,因为跟踪隐藏值可能会变得混乱!)
谢谢,Alex

谢谢大家的帮助!我会尝试这些解决方案。 - Alex
5个回答

10

我可能会使用会话变量来存储这些信息。

首先,确保你的提交到搜索页面的表单是GET操作,这样搜索细节就在你的查询字符串中。然后在你的搜索动作中,你可以获取请求URL并将其存储在会话中:

session[:search_results] = request.url

对于搜索结果页面的返回按钮,您可以按照以下方式实现:

link_to "Back to search results", session[:search_results]

我更喜欢这个,它只有一个缺点:它不允许多个搜索会话... - hurikhan77
1
顺便说一句:我更喜欢将“session[:last_query] = params”作为一个后置过滤器。这样还可以保存POST请求。但是请确保在重定向时不要这样做,只有当您的控制器实际上要显示结果时才存储参数。 - hurikhan77

2

您可以在子页面中包含查询参数。例如:/foo/search?q=stuff 显示搜索结果。然后每个结果都有一个链接,如 /foo/:id?q=stuff。在子页面上,您将可以使用参数链接回主页面。

这种解决方案不使用任何服务器端状态,通常被认为是构建 Web 应用程序的更好方式。这不仅意味着您的浏览器将按预期工作(包括书签、多个选项卡等),而且还确保可以使用适当的缓存。此外,它还降低了应用程序的复杂性,使其更易于调试和扩展。


2
您有几个选择:
1. 如您所建议,缓存结果。这样做的潜在缺点是会占用内存,如果新增有效记录,您将无法看到它们。您可以将缓存存储在 Session 中或数据库中(尽管在后一种情况下,您不会获得太多好处)。
2. 我建议只记住最后一个搜索词,可以使用 Session 或隐藏字段。当您转到搜索结果页面时,您需要重新运行查询,但在正确索引的数据库中,这不应该成为大问题。
祝您好运!

2
不,不要试图将结果缓存到会话中。真的,别这样做! - hurikhan77

1
你可以将搜索结果放在一个名为“search_results”的表中,以用户ID为键。然后当用户访问页面时,总是从该表的查询中加载。

0
如果有人看到这个页面,需要一个能够回到前一页并仍然显示搜索结果的按钮(就像 Google Chrome 的按钮),只需使用:back...
<%= link_to(image_tag("back.svg"), :back, :class => 'back_btn') %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接