Ransack,搜索多列,一个字段,rails 3

Posted

技术标签:

【中文标题】Ransack,搜索多列,一个字段,rails 3【英文标题】:Ransack, search multiple columns, one field, rails 3 【发布时间】:2013-03-02 21:01:10 【问题描述】:

我是 Ruby on Rails 的新手,我正在创建我的第一个网站。我有一个包含 3 列的用户模型:firstnamelastnameemail。我正在使用 ransack 制作一个搜索引擎,我希望有一个搜索字段可以遍历每一列并显示结果。

我制作了一个 user_controller.rb,如下所示:

@q = User.search(params[:q])
@users = @q.result(:distinct => true)

而我的 User\index.html.erb 看起来像这样:

<%= search_form_for @search do |f| %>
  <div class="field">
    <%= f.label :firstname_cont , "Firstname" %>
    <%= f.text_field :firstname_cont %>
    <%= f.label :lastname_cont , "Lastname" %>
    <%= f.text_field :lastname_cont %>
    <%= f.label :email_cont , "Email" %>
    <%= f.text_field :email_cont %>
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>

给我 3 个搜索字段,但我只想要一个包含名字、姓氏和电子邮件的搜索字段。

编辑 1: 在进行了更多测试后,我发现搜索字段无法同时处理名字和姓氏或任何空格。我读过可以像这样制作一个 helper_method: Searching multiple fields with Ransack

当我得到搜索结果时,我会进入我的模型索引等:用户/索引。我在哪里可以更改?

但是没有关于如何在视图中使用它。为什么很难做到这一点,这就是你要做的:在控制器中这样做->在模型中这样做->在视图中这样做->不要忘记像这样修复路由->

【问题讨论】:

【参考方案1】:

首先,在询问之前尝试搜索一下 gem 文档并用谷歌搜索一下 ^_^。

第一个参考的是github页面:https://github.com/ernie/ransack

在这里查看 Ransack 的 演示页面:http://ransack-demo.herokuapp.com/ 你应该看到第一个字段做了你想要的(在姓氏和名字中搜索)并查看源代码你应该看到这一行的页面

<input id="q_first_name_or_last_name_cont" name="q[first_name_or_last_name_cont]" size="30" type="text" />

这让您对要使用的正确谓词有所了解,您还可以在此处获得它们的列表:https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb(总是在 github 上的 gem 文档中)。

基于此,您可以在您的视图中执行类似的操作

<%= f.text_field :lastname_or_first_name_or_email_cont, :placeholder => 'full name or email contains' %>

生成“OR 条件”查询,您可以再次在演示页面中看到(生成的查询显示为传统 SQL 查询)

希望对你有帮助

干杯

【讨论】:

我可以请你帮忙吗?我注意到空格或使用超过 1 个单词进行搜索会使此方法失败。就像 firstname 是 Foo,lastname 是 Bar,并且我搜索 Foo bar,它会失败.. 是否可以构建一个 : def set_full_name .... end,然后在视图中调用它?以及如何在视图中调用它?使用 helper_method?我没有设法做到这一点。最后一件事,如果我搜索任何其他地方,我的结果总是会把我扔到模型 - 索引。这是为什么呢? 嗨 Remi,我面临着在搜索字段中使用多个单词进行搜索的同一面墙,目前没有找到任何答案。您可能可以使用 ransacker 构建一个“虚拟列”进行搜索,这里有一个示例github.com/ernie/ransack_demo/blob/master/app/models/user.rb。您问题的第二部分,结果总是将您带到模型索引,因为在控制器的“搜索”操作中,您呈现了“索引”视图。干杯 很好,谢谢!我将仔细看看那个演示。我还在自己学习 RoR,并在网上搜索信息。 如果我想搜索 last_name(string) 或 id(integer) 怎么办? @Leo - 为什么要搜索 ID?从用户的角度来看,ID 通常应该保持不可见....

以上是关于Ransack,搜索多列,一个字段,rails 3的主要内容,如果未能解决你的问题,请参考以下文章

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

在 Ransack 上为 Rails 设置默认搜索参数

Rails,Ransack:如何在 HABTM 关系中搜索“所有”匹配项而不是“任何”匹配项

rails gem ransack 之模糊搜索

Ruby on Rails Ransack Datetime 到日期搜索

在rails应用程序中使用Ransack搜索表单中的关联多对多关联