【问题标题】:Rails search for name Like ? not workingRails 搜索名称 Like ?不工作
【发布时间】:2016-11-25 16:16:47
【问题描述】:

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

【问题讨论】:

标签: ruby-on-rails activerecord


【解决方案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

【讨论】:

  • 非常感谢您的回复!您是对的,日期优先于名称搜索。但是,我尝试实施您的建议来修复它,但它没有给出任何搜索结果。
  • @OkiGirl 您确定有与您的搜索匹配的数据吗?请仔细检查。
  • 用更新的搜索方法再试一次:def self.search(search_date, search_name)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 2013-07-20
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多