使用 Ransack 一次搜索多个模型

Posted

技术标签:

【中文标题】使用 Ransack 一次搜索多个模型【英文标题】:Search multiple models at once with Ransack 【发布时间】:2013-05-22 10:19:24 【问题描述】:

我的应用程序标题中有一个搜索表单,我想使用此搜索表单在应用程序中搜索多个模型。

例如,/search?q=rails 之类的请求应触发对多个模型(例如 WorkProjectUser 及其定义的属性)的搜索。我想使用 Ransack,因为我已经在应用程序不同区域的 Work 模型上使用了它。

我想我还不太了解 Ransack,文档总是指出您必须定义 @q = MyModel.search(params[:q]) 才能以 search_form_for @q 的形式使用它。有没有一种方法可以让您不必提前定义特定的模型?只需传入参数名称,如search_form_for :q?

【问题讨论】:

【参考方案1】:

好的,问完这个问题后,答案突然出现在我脑海中。

我现在只是按以下方式使用 form_tag 助手,而不是 search_form_for 助手:

<%= form_tag search_path, method: :get do %>
  <%= text_field_tag :q, params[:q] %>
<%= end %>

在我刚刚做的搜索动作中:

q = params[:q]
@works    = Work.search(name_cont: q).result
@projects = Project.search(name_cont: q).result
@users    = User.search(name_cont: q).result

这对我有用。我希望这对其他人也有帮助。

【讨论】:

不错的解决方案 - 感谢分享! 在 2021 年这里说仍然是一个出色而简单的解决方案

以上是关于使用 Ransack 一次搜索多个模型的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails Ransack Datetime 到日期搜索

Ransack search,如何通过拆分输入搜索参数来搜索每个单词

Rails Ransack gem:使用一个条件搜索多个值

Rails 3.1 Ransack HABTM

模型中的 Rails 动态搜索

在 laravel 中添加多个图层以搜索模型