Rails搜索名称喜欢?不工作

时间:2016-07-21 21:49:43

标签: ruby-on-rails activerecord

我想在我的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

1 个答案:

答案 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