首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中的即时搜索不会显示正确的输出

rails中的即时搜索不会显示正确的输出
EN

Stack Overflow用户
提问于 2015-10-13 00:46:26
回答 1查看 151关注 0票数 0

我正在编码一个小的应用程序与搜索,使用户能够找到产品。用户可以按name查找产品,也可以按price & weight过滤产品(然后输出的是按价格或重量降序排列的产品列表)。我在我的产品型号上使用gem pg-search

代码语言:javascript
复制
class Product < ActiveRecord::Base
  include PgSearch
  pg_search_scope :search,
  :against => [:name],
  :using => {:tsearch => {:prefix => true} }

这是我在ProductController中的索引方法:

代码语言:javascript
复制
def index
    if params[:content].present? && (params[:price] == "1")
      @products = Product.search(params[:content]).order(price: :desc)
      respond_to do |format|
        format.js {}
        format.html{ render :index }
      end
    elsif params[:content].present? && (params[:weight] == "1")
      @products = Product.search(params[:content]).order(weight: :desc)
      respond_to do |format|
        format.js {}
        format.html{ render :index }
      end
    elsif params[:content].present?
      @products = Product.search(params[:content])
      respond_to do |format|
        format.js {}
        format.html{ render :index }
      end
    elsif params[:price] == "1"
      @products = Product.all.order(price: :desc)
      respond_to do |format|
        format.js {}
        format.html{ render :index }
      end
    elsif params[:weight] == "1"
      @products = Product.all.order(weight: :desc)
      # binding.pry
      respond_to do |format|
        format.js {}
        format.html{ render :index }
      end
    else
      @products = Product.all
      # binding.pry
    end
  end

这是呈现产品搜索结果的部分:

代码语言:javascript
复制
<div id="js-product-row">
  <%if @products.empty?%>
    <p>
      <strong>Il n'y a pas encore de produit sur le site</strong>
    </p>
 <%else%>
    <% @products.each do |product| %>
      <div class="panel panel-default">
        <div class="panel-body">
          <div class="container-fluid">
             <div class="row">
              <div class="col-md-2">
                <%= image_tag product.picture.url(:medium)%>
              </div>
              <div class="col-md-offset-3 col-md-3">
                <p><strong>
                  <%= product.description %>
                </strong></p>
              </div>
              <div class="col-md-4">
                <strong>
                  <%= product.price %> €
                </strong>
                <strong>
                  <%= product.weight %> Kg
                </strong>
                <div>
                  <%= link_to "En savoir plus", product_path(product) %>
                </div>
              </div>
            </div>
          </div>
         </div>
      </div>
    </div>
  <% end -%>
<% end -%>

下面是用来更新视图而不需要重新加载页面的js文件:

代码语言:javascript
复制
$(document).ready(function(){
  $('#js-product-row').html("<%= escape_javascript(render 'products')%>");
});

当我在控制台中调试时,@products总是以正确的顺序给我一个包含我想要的东西的数组,所以看起来后端逻辑是正确的。但每次我搜索某个内容或激活一个过滤器时,呈现的输出都不正确:有关正确实例(实际在@products数组中的实例)的信息显示两次,同时显示的还有其他不在@products中的产品。我不明白为什么会发生这种事。

EN

回答 1

Stack Overflow用户

发布于 2017-02-28 20:30:13

尝试使用.replaceWith而不是.html,否则从部分中删除<div id="js-product-row">

例如:

代码语言:javascript
复制
$('#js-product-row').replaceWith("<%= j(render 'products') %>");

我猜发生的事情是你有

代码语言:javascript
复制
<div id="js-product-row">
...
</div>

然后进行搜索,添加html,如下所示:

代码语言:javascript
复制
<div id="js-product-row">
   <div id="js-product-row">
    ...
   </div>
 </div>

再次运行会产生类似这样的结果(例如,双结果):

代码语言:javascript
复制
 <div id="js-product-row">
   <div id="js-product-row">
    ...
   </div>
   <div id="js-product-row">
    ...
   </div>
 </div>

奖励更新:

顺便说一句,你可以像这样弄干(不要重复)你的控制器:

代码语言:javascript
复制
def index
  @products = Product
  if params[:content].present?
    @products = @products.search(params[:content])
  end
  if params[:price] == "1"
    @products = @products.order(price: :desc)
  elsif params[:weight] == "1"
    @products = @products.order(weight: :desc)
  end
  @products = @products.all
  format.js
  format.html
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33086249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档