【问题标题】:My Search returns an empty array我的搜索返回一个空数组
【发布时间】:2017-07-08 08:42:03
【问题描述】:

我正在尝试创建一个搜索栏,以便在我的索引中按其名称查找一些鸡尾酒。我得到的只是一个空数组...... 我相信我的 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

【问题讨论】:

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


    【解决方案1】:

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

    如果您的表格有“name”列,那么:

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

    应该做的工作。

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

    【讨论】:

      【解决方案2】:

      由于您使用了LIKE,因此如果搜索词只匹配名称的一部分,您似乎想查找每一个鸡尾酒。这可以使用% 存档(参见:Safe ActiveRecord like query)。

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

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

      没有%你查询的基本一样

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

      只返回完全匹配。

      【讨论】:

      • 超级!我也在尝试这个,但忘记使用双引号进行插值......谢谢你:)
      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2022-01-21
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多