Javascript 在Rails中使用ajax呈现查询
我需要以下问题的帮助或指导。每次在搜索表单中发生更改时,我都会使用ajax动态地从数据库重新加载查询 其目的是根据搜索表单中选择的参数动态加载N个寄存器 我有这段代码,允许我对数据库进行查询,并在索引中打印结果。顺便说一下,代码正在工作,最后每次迭代都会为查询结果中的每个注册表打印一个“正方形”() 控制器:Javascript 在Rails中使用ajax呈现查询,javascript,ruby-on-rails,json,ajax,Javascript,Ruby On Rails,Json,Ajax,我需要以下问题的帮助或指导。每次在搜索表单中发生更改时,我都会使用ajax动态地从数据库重新加载查询 其目的是根据搜索表单中选择的参数动态加载N个寄存器 我有这段代码,允许我对数据库进行查询,并在索引中打印结果。顺便说一下,代码正在工作,最后每次迭代都会为查询结果中的每个注册表打印一个“正方形”() 控制器: def clientsjson @search = Client.search(params[:q]) @clients = @search.result
def clientsjson
@search = Client.search(params[:q])
@clients = @search.result
respond_to do |format|
format.json { render :json => @clients }
end
end
Js文件
$(document).ready(function() {
$( ".searchupdate" ).change(function() {
$.getJSON("/client/clientsjson?"+$('#client_search').serialize(), function (data) {
var $ul = $('<div></div>');
$ul.append(data.map(function(data) {
var $ini= '<div class=\"panel-mate bgray-o\"><div class=\"row\">'
var $inicio='<div class=\"col-xs-4\" align=\"center\">'
var $titulo='<h3 style="height:45px; width:100% overflow:hidden"><a class="h1-small" href="/es/auctions/'+data['id']+'">'+data['name']+'</a></h3>'
var $titulo2='<h5 class="cursive txt-gray-lig negrita font-serif">City, Country</h5>'
var $titulo3='<h5 class="cursive txt-gray-lig negrita font-serif">Idioma:</h5>'
var $titulo4='<a data-toggle="modal" data-id="1" title="View comments" class="open-modal-auction" href="#myModalc'+data['id']+'"><h5 class="txt-auto" style="margin-top: 10px">'
var $titulo5='Rating:<img src="/assets/estrella-991be5754e32c5209a9b4c697cf93320.png" alt="Estrella" width="20" height="20" /><img src="/assets/estrella-991be5754e32c5209a9b4c697cf93320.png" alt="Estrella" width="20" height="20" /><img src="/assets/estrella-991be5754e32c5209a9b4c697cf93320.png" alt="Estrella" width="20" height="20" /></h5></a>'
var $fin='</div>'
var $column2='<div class=\"col-xs-5\" align=\"center\"><br>'
var $parte1 ='<h4 class="negrita cursive font-serif">'+data['date']+'</h4>'
var $parte2 ='<h3 class="negrita cursive font-serif" style="margin-top: 2px">Maximum Price<span class="txt-mor ">'+data['maximum_price']+'</span></h3> <h5 class="cursive txt-gray-lig"> Duración: '+data['duration']+'</h5>'
var $parte3 ='<br/><p style="margin-top:-12px"><a data-toggle="modal" data-id="1" title="Bid" style:"width:120px;" class="open-modal-auction btn btn-morado luz-btn-mor" href="#myModal'+data['id']+'">Puja Avanzada</a></p>'
var $column2fin='</div>'
var $column3='<div class="col-xs-3 div-general" align="center" style="padding:">'
var $column1='<p style="margin-top: 20px"><img src="/assets/bid-c355299aa9a59c701f6768169153b0e6.jpg" alt="Bid" width="75" height="50" /><a data-toggle="modal" data-id="1" title="Bid" class="open-modal-auction" href="#myModalbids'+data['id']+'" style="margin-left:5px">Pujas</a></p>'
var $form='<div class="borde-color-mora" style="padding-top:5px; margin-top:20px"><form novalidate="novalidate" class="formtastic bid" id="new_bid" action="/es/bids" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="QkFLk2OiMkFyMx5eeYqsAWex8DVeSpAT2YOnr1sY3kOIXKjsx4F0GRHs7a6byMCReue0Y82EScIUWXSErRxnhA==" /><div class="hidden input optional form-group" id="bid_auction_id_input"><span class="form-label"><label for="bid_auction_id" class=" control-label">Auction</label></span><span class="form-wrapper"><input id="bid_auction_id" value="1" type="hidden" name="bid[auction_id]" /></span></div><p align="left" style="margin-left:5px">Pujar <input class="borde-color-mora" style="width: 100px; text-align:right" type="text" value="0.0" name="bid[amount]" id="bid_amount" /></p>'
var $form2='<input type="submit" name="commit" value="Bid Fast" class="btn btn-morado luz-btn-mor" id="button-bid" style="margin-top:5px; margin-bottom:20px" data-loading-text="Loading..." autocomplete="off" /></form></div>'
var $column3fin='</div>'
var $end= '</div></div>'
return $($ini+$inicio+$titulo+$titulo2+$titulo3+$titulo4+$titulo5+$fin+$column2+$parte1+$parte2+$parte3+$column2fin+$column3+$column1+$form+$form2+$column3fin+$end)
}));
$('#clientList1').html('');
$('#clientList1').empty().append($ul);
});
});
});
Json生成器文件:
json.array! @clients do |client|
json.id
json.name
json.rate
json.address
json.date
json.numbercomments
json.comments client.comments, :subject, :comment,:created_at
json.country do
json.name
end
json.city do
json.name
end
json.language do
json.name
end
end
这是我在route.rb中创建的调用操作的路径
get 'client/clientsjson' => "clients#clientsjson", :as => 'clientsjson', :format => :json
更好的方法是使用or,两者都允许您轻松地在json响应中包含相关数据 在本例中,您只需在以下位置创建视图文件:
app/views/clients/clientjson.json.jbuilder
然后您的jbuilder将看起来像:
json.array! @clients do |client|
json.id client.id
json.name client.name
json.rate client.rate
json.address client.address
json.date client.date
json.numbercomments client.numbercomments
json.comments client.comments, :subject, :comment, :created_at
json.country do
json.name client.country.name
end
json.city do
json.name client.city.name
end
json.language do
json.name client.language.name
end
end
然后将控制器操作更改为:
def clientsjson
@search = Client.search(params[:q])
@clients = @search.result
respond_to do |format|
format.json
end
end
这将为您提供所需的所有相关json节点。更好的方法是使用或两者都允许您轻松地在json响应中包含相关数据 在本例中,您只需在以下位置创建视图文件:
app/views/clients/clientjson.json.jbuilder
然后您的jbuilder将看起来像:
json.array! @clients do |client|
json.id client.id
json.name client.name
json.rate client.rate
json.address client.address
json.date client.date
json.numbercomments client.numbercomments
json.comments client.comments, :subject, :comment, :created_at
json.country do
json.name client.country.name
end
json.city do
json.name client.city.name
end
json.language do
json.name client.language.name
end
end
然后将控制器操作更改为:
def clientsjson
@search = Client.search(params[:q])
@clients = @search.result
respond_to do |format|
format.json
end
end
这将为您提供所需的所有相关json节点。我同意使用jbuilder或RABL生成json。这使您可以控制需要恢复多少,还可以为相关记录生成嵌套数组,等等
对于这样的一些人,我也会尝试使用类似Backbone.JS和handlebar的东西来进行javascript模板化。您不必这样做,但会更清晰地将HTML与Javascript分开,使将来对HTML或JS的更改更容易。任何JS模板系统都可能更好,而且一个也没有,但我对主干和把手很满意。我同意使用jbuilder或RABL生成json。这使您可以控制需要恢复多少,还可以为相关记录生成嵌套数组,等等
对于这样的一些人,我也会尝试使用类似Backbone.JS和handlebar的东西来进行javascript模板化。您不必这样做,但会更清晰地将HTML与Javascript分开,使将来对HTML或JS的更改更容易。任何JS模板系统都可能更好,而且没有,但我对主干和把手很满意。您好,谢谢您的回答我一直在尝试应用您的建议,现在似乎查询结果是空的,或者创建的对象没有DB值。有什么想法吗?首先,您是否获得了所需的JSON输出?我没有测试jbuilder代码,所以它可能不正确。你能点击localhost:3000/client/clientsjson.json吗?q=test并发布你的输出吗?我用json的输出更新帖子。很明显,奥比尤斯没有给我我想要的结果。你能用你的jbuilder(或Rabl?)模板编辑你的问题吗,我在问题中添加了jbuilder模板您好,谢谢您的回答我一直在尝试应用您的建议,现在看来查询结果是空的,或者创建的对象没有DB值。有什么想法吗?首先,您是否获得了所需的JSON输出?我没有测试jbuilder代码,所以它可能不正确。你能点击localhost:3000/client/clientsjson.json吗?q=test并发布你的输出吗?我用json的输出更新帖子。很明显,奥比尤斯没有给我我想要的结果。你能用你的jbuilder(或Rabl?)模板编辑你的问题吗?完成了,我在问题中添加了jbuilder模板