我想在我的rails应用中添加搜索功能。我已经按日期搜索了,但是name LIKE ?
的搜索并没有给我任何结果。
我希望将名称搜索作为通配符搜索。
任何人都可以告诉我哪里可能出错了吗?
查看index.html.erb:
<%= form_tag(appointments_path, :method => "get") do %>
<%= text_field_tag :search, nil, :placeholder => "Search Full Name" %>
<%= text_field_tag :search, nil, :placeholder => "Search Date (YYYY-MM-DD)"%>
<%= submit_tag "Search" %>
<% end %>
控制器:
def self.search(search_for)
Appointment.where('name Like ?', search_for)
Appointment.where('date = ?', search_for)
end
答案 0 :(得分:1)
在SQL中,我认为您的查询应该是:
def self.search(search_for)
Appointment.where('name LIKE ?', "%#{search_for}%")
end
另一方面,我认为您可能遇到的问题是您的表单只发送search
参数。设置名称时的含义,在日期覆盖后立即显示。
解决这个问题的方法可能是更改输入字段的名称,如下所示:
<%= form_tag(appointments_path, :method => "get") do %>
<%= text_field_tag :search_name, params[:search_name], :placeholder => "Search Full Name" %>
<%=text_field_tag :search_date, params[:search_date], :placeholder => "Search Date (YYYY-MM-DD)"%>
<%= submit_tag "Search" %>
<% end %>
在你的控制器中,你可以这样做:
def search
Appointment.search(search_params)
end
private
def search_params
params.permit(:search_date, :search_name)
end
在预约模式中,您可以:
def self.search(search_date, search_name)
Appointment.where("name LIKE :search_name OR date = :search_date", search_name: "%#{search_name}%", search_date: search_date)
end