首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Ransack全名搜索

用Ransack全名搜索
EN

Stack Overflow用户
提问于 2015-07-21 22:32:41
回答 3查看 1.9K关注 0票数 2

在我继承的一个项目中,我有一个Ransack表单,如下所示:

代码语言:javascript
复制
<%- 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_on的值是student_first_name_or_student_last_name_or_student_email_cont

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

EN

回答 3

Stack Overflow用户

发布于 2019-06-18 12:20:37

用ransack搜索full_name (first_name & last_name)

代码语言:javascript
复制
ransacker :full_name do |parent|
  Arel::Nodes::NamedFunction.new('CONCAT_WS', [
     Arel::Nodes.build_quoted(' '), parent.table[:first_name], parent.table[:last_name]
  ])   
end
票数 5
EN

Stack Overflow用户

发布于 2019-01-01 16:51:17

你想要的是:

代码语言:javascript
复制
  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

这将在您的模型中进行,然后在您的视图中您可以编写full_name_or_first_name_or_last_name或任何您想要编写的东西。我意识到这已经晚了3年,但希望这能对其他人有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2021-04-23 10:01:00

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

代码语言:javascript
复制
ransacker :full_name do
  Arel.sql("CONCAT_WS(' ', users.first_name, users.last_name)")
end

何时加入表:

代码语言:javascript
复制
ransacker :user_name_with_contry_code do
  Arel.sql("CONCAT_WS(' | ', countries.code, users.first_name)")
end

https://github.com/activerecord-hackery/ransack/wiki/Using-Ransackers

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31550779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档