11

我是 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

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

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

4

1 回答 1

25

首先,在询问之前尝试搜索一下 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 (总是在 gem github 上的文档)。

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

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

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

希望这可以帮助

干杯

于 2013-03-16T11:26:51.363 回答