【发布时间】:2020-01-10 01:23:06
【问题描述】:
我正在关注 Railscast:http://railscasts.com/episodes/37-simple-search-form?autoplay=true
结果在我的实现中表现良好。但是因为我有 first_name 和 last_name 列,而不是上面示例中的“name”,所以无论搜索词是什么,我都需要一种方法来搜索两者。我怎样才能做到这一点?目前只有名字搜索有效。
用户.rb
def self.search(search)
if search
where('first_name LIKE :search OR last_name LIKE :search', search: "%#{search}%")
else
all
end
end
people_controller,索引函数:
@users = User.search(params[:search])
index.html.erb(用于人员控制器):
<%= form_tag people_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag("Search users", first_name: nil, last_name: nil) %>
</p>
<% end %>
<ul>
<% @users.each do |user| %>
<li>
<%= link_to profiles_path(user_id: user.id) do %>
<%= user.first_name %>
<%= user.last_name %>
<% end %>
</li>
<% end %>
</ul>
更新:
所以这很奇怪。我有 4 个用户。对于前 3 个,只有名字搜索有效。姓氏或全名(或部分名称)没有。对于最后一个用户,只有姓氏搜索有效。
...会发生什么?刚刚又增加了三个用户并进行了测试。第一个新用户仅按名字进行搜索。第二个新用户仅按姓氏进行搜索。他的名字是第三个用户的姓氏的一部分,当用新用户的名字搜索时返回了第三个原始用户名(...为什么?以前没有这样工作;部分名称搜索不起作用其他用户)。并且只搜索了第三个用户的姓氏。
更新:
好的,什么也没做。但是现在第一个原件的用户会按姓氏或名字(之前只有名字)进行搜索。为什么?第二个原始用户也是如此。现在可以对两个用户进行部分搜索。为什么?并且姓氏(仅)可搜索的最后一个新用户现在无法被任何人搜索。为什么?
刚才又试了一次,又回到了以前,只能按名字搜索,不能部分搜索,等等。为什么这一直在变化?我怎样才能让搜索词只搜索名字或姓氏或两者兼而有之?
更新:
我得到了答案(以上,不是一般的)。搜索区分大小写。现在我的问题是:我怎样才能使它不区分大小写并让包含名字和姓氏的搜索词(例如“Tom Paulson”)工作? (目前只搜索任一作品)
更新:
所以我通过将 LIKE 更改为 ILIKE 来解决区分大小写的问题。我正在使用 Postgres。
如果您能帮助搜索名字和姓氏,我将不胜感激!
更新:
所以我现在使用它来搜索名字和姓氏。但是现在部分搜索不起作用。有没有办法在这里也能做到这一点?
where("first_name ilike :search or last_name ilike :search or first_name || ' ' || last_name ilike :search", search: "%#{search}")
更新:
通过将 % 添加到 %#{search} 来解决它
%#{search}%
此案似乎已解决。谢谢!稍后我可能会发布答案。
【问题讨论】:
标签: ruby-on-rails ruby erb