在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:EstrellaEstrellaEstrella
' var $fin='
' var $column2='

' var $parte1 ='

'+data['date']+'

' var $parte2 ='

Maximum Price'+data['maximum_price']+'

Duración: '+data['duration']+'
' var $parte3 ='

Puja Avanzada

' var $column2fin='
' var $column3='
' var $column1='

BidPujas

' var $form='

Pujar

' var $form2='
' 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感到满意。