我有一个包含搜索栏的产品页面。对于每个keyup
我想要更新产品列表。
我的index.html.erb
列出所有产品,index.js.erb
将使用搜索到的产品重新填充列表。
问题是:Rails总是返回 HTML模板而不是JS模板。
因此,当我选中Chrome中的NETWORK标签时,我会收到回复,但它包含HTML模板。
这是我的简化代码:
// js
$("#search").on("keyup", function() {
var query = { search: $(this).val() };
$.get("/products", query);
});
我的控制器只是一个简单的where
子句:
# products_controller.rb
def index
if params[:search]
@products = Product.where("( LOWER(name) LIKE LOWER(?)", "%#{ params[:search] }%")
else
@products = Product.all
end
respond_to do |format|
format.html
format.js
end
end
JS模板仍然是inspect
// products/index.js.erb
console.log("<%= @products.inspect %>");
感谢。
答案 0 :(得分:2)
可能是您layout
回复中显示ajax
的结果:
#app/controllers/products_controller.rb
Class ProductsController < ApplicationController
def index
...
respond_to do |format|
format.js { render layout: !request.xhr? }
format.json { render json: @products.to_json }
end
end
end
如果您希望仅收到纯product
个数据,则您需要按以下方式使用JSON
:
$.get("/products", query, dataType: "json");
这将使您能够接收json对象,这只是一组纯数据:
$.get("/products", query, dataType: "json", function(data){
//json data will be here
});