使用jquery和rails加载部分

我很好奇用jquery加载rails部分的最佳方法。 到目前为止,我已经尝试了一个不起作用的解

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() { alert('Load was performed.'); }); 

是否为此构建单独的操作和/或控制器并设置路径是最佳解决方案? 我问,因为使第一个解决方案工作似乎更容易,也许不那么安静。

谢谢。

您应该无法从HTTP请求访问模板文件(.erb),这是非常糟糕的做法。 我建议你把它们放在你的web服务器路径之外,只能通过你的应用程序访问它们。

我不确定Rails,但我想你需要创建一个单独的控制器(或其他)来做到这一点。

编辑这是因为.erb文件是嵌入式Ruby文件,如果您尝试请求它们,您将获得不想向用户显示的所有不需要的数据,如<%= page_title %> 。 因此,您需要通过Rails应用程序传递这些.erb文件,以便将它们正确解释为HTML。

代码不起作用的原因是rails不会在外部公开视图文件。 为了实现你想要的东西,你需要一个可以渲染这个部分的动作:

 def image_gallery render :partial => "image_gallery" end 

还有一个名为jRails的插件,它将标准的ajax助手(使用原型)替换为等效的面向jquery的助手。 在你的情况下,你会使用类似的东西

 <%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %> 

更重要的是,在Rails 3中你不需要它。 看到这个链接 。

另一种选择:

 $('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>'); 

使用rails 3你可以做…

调节器

 @content = '/some/partial' 

view – haml.erb(html.erb)或js.erb

 $('#myDiv').html("<%= escape_javascript render @content %>"); 

你可以尝试这个如果rails 2(只有原型可用,除非noConflict添加)…

在控制器中

 @content = render :partial=>"/users/cool_partial" 

打电话给你的js

 myFunction(#{@content.to_json}) 

你的function……

 myFunction = function(content){ $("myDiv").html(content); } 

我同意中微子的看法,这可以通过一个动作得到更好的处理。

 def get_partial render 'some/partial' end 

希望这可以帮助