查询数据库的名字或姓氏
Posted
技术标签:
【中文标题】查询数据库的名字或姓氏【英文标题】: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 %>
这很完美,但是我希望能够输入姓氏并显示这些结果。 我知道我已经很接近了,但我尝试过的一些事情没有奏效。
谢谢!
【问题讨论】:
【参考方案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
【讨论】:
以上是关于查询数据库的名字或姓氏的主要内容,如果未能解决你的问题,请参考以下文章