【问题标题】:Query DB for first or last name查询数据库的名字或姓氏
【发布时间】:2022-01-12 15:51:44
【问题描述】:

我正在为我的用户表开发搜索功能,以便我可以查询用户并将其显示在我的应用程序中。到目前为止,我已经为 first_name 工作,但我不确定用于在同一查询中搜索姓氏的语法。我的用户控制器如下所示:

  def search
   if params[:search].blank?
    redirect_to users_path and return
  else
   @parameter = params[:search].downcase
   @results = User.all.where("lower(first_name) LIKE :search", search: "%#{@parameter}%")
 end
end

输出:

User Load (0.9ms)  SELECT "users".* FROM "users" WHERE (lower(first_name) LIKE '%laura%')

我的搜索表单如下所示:

<div class="input-group">
    <%= search_field_tag :search, params[:search], placeholder: "Type ", class: "form-control" %>
        <div class="input-group-btn">
            <%= button_tag "Search User", class: "btn btn-info", :name => nil %>
        </div>
    </div>
<% end %>

还有我的结果页面:

<% @results.each do |result| %>
  <tbody>
     <tr>
       <td><%= link_to result.full_name, user_path(result) %></td>
       <td><%= result.email %></td>
       <td><% if result.subscribed? %>
       <span class="badge rounded-pill bg-success">Subscribed</span>
         <% else %>
       <span class="badge rounded-pill bg-danger">Not Subscribed</span>
     <% end %>

这很完美,但是我希望能够输入姓氏并显示这些结果。 我知道我已经很接近了,但我尝试过的一些事情没有奏效。

谢谢!

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    你有没有尝试改变

    @results = User.all.where("lower(first_name) LIKE :search", search: "%#{@parameter}%")
    

    进入

    @results = User.all.where("lower(first_name) LIKE :search or lower(last_name) LIKE :search", search: "%#{@parameter}%")
    

    请更新...

    R

    【讨论】:

    • 这很完美。谢谢!
    【解决方案2】:

    在 Postgres 上,您可以使用 ILIKE 执行不区分大小写的匹配:

    def search
      @term = params[:search]
      redirect_to users_path and return unless @term.present?
      @users = User.where(
        'users.first_name ILIKE :term OR users.last_name ILIKE :term', 
        term: "%#{@term}%"
      )
    end
    

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多