在Rails中使用ajax渲染查询
我需要有以下问题的帮助或指导。 每次在搜索表单中更改时,我都使用ajax从数据库重新加载动态查询。
目的是根据搜索表单中选择的参数动态加载N个寄存器。
我有这个代码,允许我对数据库进行查询并在索引中打印结果。 代码正在运行,最后每次迭代都会在查询结果中为每个注册表打印一个“square”()。
控制器:
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 = $(''); $ul.append(data.map(function(data) { var $ini= '' var $inicio='' var $titulo=''+data['name']+'
' var $titulo2='City, Country
' var $titulo3='Idioma:
' var $titulo4='' var $titulo5='Rating:
' var $fin='' var $column2='
' var $parte1 =''+data['date']+'
' var $parte2 ='Maximum Price'+data['maximum_price']+'
Duración: '+data['duration']+'
' var $parte3 ='
' var $column2fin='' var $column3='' var $column1='' var $form='' var $column3fin='' var $end= '' 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); }); }); });
HTML:
好吧,正如我之前所说,代码几乎完美无缺。 但我有两个主要问题。
1-)模型客户端,有几个模型父母,如:国家,城市,语言等.json查询只带来ID,但不要让我得到打印的名称。 类似于:“client.country.name”。 所以我如何访问父母模型,以便我可以打印名称而不是ID
2-)类似于第一个问题但与子模型类似的东西,例如:“client.comments”。 通常我会这但我不能从JSON这样做,所以这里的问题是如何访问与查询中的每个寄存器关联的子模型。
还有更好的方法吗?
先感谢您。
////更新
在我的浏览器中调用此localhost:3000 / client / clientsjson.json?q = test后,这是输出:
[{"comments":[]},{"comments":[]}, {"comments":[]}]
Json Builder文件:
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
更好的方法是使用jbuilder或RABL ,它们都允许您轻松地在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和把手这样的javascript模板。 您没有必要,但会更加干净地将HTML与Javascript分开,从而使对HTML或JS的未来更改变得更加容易。 任何JS模板系统都可能更好,没有,但我对Backbone和Handlebars感到满意。