我的搜索返回一个空数组

时间:2017-02-18 22:22:12

标签: ruby postgresql ruby-on-rails-5

我正在尝试制作一个搜索栏,以便在我的索引中找到他们名字的鸡尾酒。我得到的只是一个空阵...... 我相信我的SQl请求不好......我需要帮助才能让它正常工作。此致

这是我的代码:

搜索表单:

  <%= simple_form_for :query,  url: cocktails_path, :method => :get do |f| %>
       <%= f.input :search %>
       <%= f.button :submit %>
   <% end %>

鸡尾酒控制器:

 def index
    if params[:query].present?
      @cocktails = Cocktail.all
      @cocktail_search = @cocktails.where('cocktails.name LIKE ?', params[:query][:search])
      binding.pry
    else
      @cocktails = Cocktail.all
    end
  end

索引视图:

<% if @cocktail_search %>
    <% @cocktail_search.each do |cocktail| %>
     <div class="col-xs-12 col-sm-3">
        <div class="card"  style="background-image: linear-gradient(rgba(0,0,0,0.3), rgba(0,0,0,0.2)),
           url('<%= cl_image_path cocktail.photo %>');">

           <h2 class="card-description"><%= link_to cocktail.name, cocktail_path(cocktail)%></h2>
        </div>
      </div>
    <% end %>
  <% else %>
    <% @cocktails.each do |cocktail| %>
      <div class="col-xs-12 col-sm-3">
        <div class="card"  style="background-image: linear-gradient(rgba(0,0,0,0.3), rgba(0,0,0,0.2)),
           url('<%= cl_image_path cocktail.photo %>');">

           <h2 class="card-description"><%= link_to cocktail.name, cocktail_path(cocktail)%></h2>
        </div>
      </div>
    <% end %>
  <% end %>

This is my binding pry

2 个答案:

答案 0 :(得分:0)

  

@cocktail_search = @ cocktails.where(&#39; cocktail.name LIKE?&#39;,params [:query] [:search])

如果您的表格中有列&#34; 名称&#34;,则:

@cocktail_search = @cocktails.where('name LIKE ?', params[:query][:search])

应该做的工作。

如果您不确定哪里出了问题,可以rails console自己检查一下,例如。 Coctail.where("name like ?", "Mojito")并查看它是否返回预期结果。

答案 1 :(得分:0)

由于您使用LIKE,如果搜索字词仅与名称的某些部分匹配,您似乎希望每次都能找到鸡尾酒。这可以使用%存档(请参阅:Safe ActiveRecord like query)。

此外,您可能希望使用不区分大小写的ILIKE代替LIKE

@cocktails.where('name ILIKE ?', "%#{params[:query][:search]}%")

如果没有%,您的查询基本上与

相同
@cocktails.where(name: params[:query][:search])

仅返回完全匹配。