Ransack,搜索多个列,一个字段,轨道3

时间:2013-03-14 13:24:11

标签: ruby-on-rails search ransack

我是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: 在测试了一些之后,我发现搜索字段不能处理firstname和lastname,也不能处理任何空格。我已经读过可以像这样制作一个helper_method: Searching multiple fields with Ransack

当我得到搜索结果时,我会被扔进我的模型索引等:user / index。我在哪里可以改变这个?

但是在视图中没有关于如何使用它的内容。为什么这么难以为止,这就是你所做的:在Controller中这样做 - &gt;在模型中这样做 - &gt;在视图中这样做 - &gt;别忘了修这样的路线 - &gt;

1 个答案:

答案 0 :(得分:21)

首先,在要求尝试通过gem文档进行搜索并稍微搜索一下^ _ ^。

第一个引用的是github页面:https://github.com/ernie/ransack

在这里查看Ransack的演示页面http://ransack-demo.herokuapp.com/您应该看到第一个字段符合您的要求(在lastname和firsname中搜索)并查看源代码你应该看到这一行的页面代码

<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 doc中)。

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

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

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

希望这有帮助

干杯