使用jquery和rails加载部分

时间:2010-02-09 14:36:29

标签: jquery ruby-on-rails load partial

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

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

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

感谢。

5 个答案:

答案 0 :(得分:8)

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

我不确定Rails,但我想你需要创建一个单独的控制器(或其他)来执行此操作。

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

答案 1 :(得分:3)

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

def image_gallery
  render :partial => "image_gallery"
end

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

这样的东西
<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>

更重要的是,在Rails 3中你不需要它。请参阅this link

答案 2 :(得分:3)

答案 3 :(得分:3)

使用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})

你的功能......

myFunction = function(content){

    $("myDiv").html(content);

}

我同意中微子的观点,即通过动作可以更好地处理这个问题。

def get_partial
  render 'some/partial'
end

希望这有帮助

答案 4 :(得分:3)

另一种选择:

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