通过轨道上的javascript文件ruby渲染局部视图

我有一个索引文件,只包含谷歌地图(通过javascript地图)。 当我搜索某个地方的时候,它也会把它附近的地图钉在现在好的地图上。 但我想要的是,当我点击地图上的标记时。 它应该在地图下方的同一页面上显示一个地方细节。 我创建了ajax assets / javascript / customer.js,将URL指向controller / customers / index中的客户控制器,我得到整个页面作为响应。 我们知道这是错的。 这是我的js文件内容

$.ajax({ url: "/", async: false, method: "post", data: { "place_id" : place["place_id"] }, success: function(data){ alert('success'); } }); infoWindow.open(map, marker); buildIWContent(place); }); 

我的控制器function是

 def index if params[:place_id] @place = Places.find(params['place_id']) end end 

这就是我想在我的索引页面中显示的内容,即html.erb

  

我知道在rails中支持部分内容,但我不知道这些是否有效。 我是Rails的新手,如果你发现我的问题非常愚蠢,请原谅我。 我只想通过ajax魔术来展示这个地名div,无论是通过局部还是原样。

要解决您的问题,您必须在此处修改一些代码。 首先,您必须将您的ajax请求方法和url修改为:

 $.ajax({ url: "/customers", async: false, method: "GET", data: { "place_id" : place["place_id"] }, success: function(data){ alert('success'); } }); infoWindow.open(map, marker); buildIWContent(place); }); 

当您完成访问客户索引页面时,它将显示警报。 然后。 在索引方法中,尝试执行以下操作:

 def index if params[:place_id] @place = Places.find(params['place_id']) end respond_to do |format| format.html format.js end end 

然后。 您必须创建index.js.erb包含的新文件

 $('.place-name').text('<%= @place %>'); 

它只是原型。 您必须以自己的方式进行自定义

如果我正确理解您的问题,您希望将Rails部分渲染为对AJAX调用的响应。 如果是这种情况,那么这是错误的思考方式。

Rails只是一个Web服务器。 它返回文本有效负载,可以是JSON,XML或HTML(以及其他内容)。 部分或ERB模板只是生成的JSON或HTML的抽象。

当您加载页面时,Rails将ERB(以及部分,布局等)编译为HTML有效负载并返回该值。 因此,如果您要向端点发出AJAX请求,您将获得所有HTML(包括布局)。 您可以执行类似render layout: false以不渲染布局,但是您需要条件或单独的端点来了解何时渲染布局以及何时不渲染布局。

一般来说,社区似乎正在逐渐远离这一点,因为AJAX请求偏向于JSON服务器响应的客户端模板,但你仍然可以通过添加layout: false (或者你想要的任何布局)