Ruby on rails rails中的即时搜索未显示正确的输出
我正在编写一个带有搜索功能的小应用程序,使用户能够找到产品。用户可以按名称查找产品,并可以按价格和重量筛选产品。然后,输出是按价格或重量降序排列的产品列表。我在我的产品模型上使用gem pg搜索: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 =
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