Ruby on rails 全名搜索,带搜掠

Ruby on rails 全名搜索,带搜掠,ruby-on-rails,ransack,Ruby On Rails,Ransack,我继承了一个项目,上面有一个搜索表,如下所示: <%- ransack_form_options ||= {} -%> <%- search_field_options ||= {} -%> <%- search_field_options.merge! autocomplete: "off", id: "q" -%> <div class="search-form"> <%= search_form_for(@q, ransack_f

我继承了一个项目,上面有一个搜索表,如下所示:

<%- ransack_form_options ||= {} -%>
<%- search_field_options ||= {} -%>
<%- search_field_options.merge! autocomplete: "off", id: "q" -%>

<div class="search-form">
  <%= search_form_for(@q, ransack_form_options) do |f| %>
    <%= f.text_field search_on, search_field_options %>
    <%= f.submit 'Search' %>
    <%= button_tag '', class: 'cancel-search' %>
  <% end %>
</div>

search\u on
的值是
student\u first\u name\u或\u student\u last\u name\u或\u student\u email\u cont


这适用于通过名字、姓氏或电子邮件进行搜索。但如果我想搜索全名、名字、姓氏或电子邮件呢?我该怎么做呢?

您想要的是:

  ransacker :full_name do |parent|
    Arel::Nodes::InfixOperation.new(
      '||',
      Arel::Nodes::InfixOperation.new(
        '||',
        parent.table[:first_name], Arel::Nodes.build_quoted(' ')
      ),
      parent.table[:last_name]
    )
  end

这将进入你的模型,然后在你的视图中,你可以写全名、名字、姓氏或任何你想写的东西。我意识到这已经晚了3年,但希望这能对其他人有所帮助。

使用ransack(名字和姓氏)搜索全名。


今天,可以更容易地做到:

ransacker :full_name do
  Arel.sql("CONCAT_WS(' ', users.first_name, users.last_name)")
end
当有联接表时:

ransacker :user_name_with_contry_code do
  Arel.sql("CONCAT_WS(' | ', countries.code, users.first_name)")
end

什么是
全名
另一个db列或名+姓?您使用的数据库是什么?可能与
ransacker :user_name_with_contry_code do
  Arel.sql("CONCAT_WS(' | ', countries.code, users.first_name)")
end