Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的即时搜索未显示正确的输出_Ruby On Rails_Ajax_Search - Fatal编程技术网

Ruby on rails rails中的即时搜索未显示正确的输出

Ruby on rails rails中的即时搜索未显示正确的输出,ruby-on-rails,ajax,search,Ruby On Rails,Ajax,Search,我正在编写一个带有搜索功能的小应用程序,使用户能够找到产品。用户可以按名称查找产品,并可以按价格和重量筛选产品。然后,输出是按价格或重量降序排列的产品列表。我在我的产品模型上使用gem pg搜索: class Product < ActiveRecord::Base include PgSearch pg_search_scope :search, :against => [:name], :using => {:tsearch => {:prefix =

我正在编写一个带有搜索功能的小应用程序,使用户能够找到产品。用户可以按名称查找产品,并可以按价格和重量筛选产品。然后,输出是按价格或重量降序排列的产品列表。我在我的产品模型上使用gem pg搜索:

class Product < ActiveRecord::Base
  include PgSearch
  pg_search_scope :search,
  :against => [:name],
  :using => {:tsearch => {:prefix => true} }
这是呈现产品搜索结果的部分:

<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文件:

$(document).ready(function(){
  $('#js-product-row').html("<%= escape_javascript(render 'products')%>");
});

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

请尝试使用.replaceWith而不是.html,否则请从部分文件中删除

e、 g:


js{}可能你会尝试格式化。jsI不明白为什么你使用了,而不是没有改变任何东西。我真的被Javascript函数弄糊涂了。看起来当页面被加载时,它会呈现出_产品——这是否使用了TurboLink?这不是我所熟悉的吗?你能详细介绍一下JS在那里做什么吗?它完全按照你说的做
$(document).ready(function(){
  $('#js-product-row').html("<%= escape_javascript(render 'products')%>");
});
$('#js-product-row').replaceWith("<%= j(render 'products') %>");
<div id="js-product-row">
...
</div>
<div id="js-product-row">
   <div id="js-product-row">
    ...
   </div>
 </div>
 <div id="js-product-row">
   <div id="js-product-row">
    ...
   </div>
   <div id="js-product-row">
    ...
   </div>
 </div>
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