我正在尝试制作一个搜索栏,以便在我的索引中找到他们名字的鸡尾酒。我得到的只是一个空阵...... 我相信我的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 %>
答案 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])
仅返回完全匹配。