9

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

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

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

谢谢。

4

5 回答 5

8

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

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

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

于 2010-02-09T14:40:06.860 回答
3

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

def image_gallery
  render :partial => "image_gallery"
end

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

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

更重要的是,在 Rails 3 中您将不需要它。请参阅此链接

于 2010-02-09T14:45:51.017 回答
3

另一种选择:

$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>');
于 2012-05-15T23:48:48.263 回答
3

使用rails 3,您可以...

控制器

@content = '/some/partial'

查看 - 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);

}

我确实同意 neutrino 的观点,即这可以通过一个动作来更好地处理。

def get_partial
  render 'some/partial'
end

希望这可以帮助

于 2012-04-20T21:12:23.690 回答
3

这就是你想要的:

http://www.slideshare.net/JamesEdwardGrayII/ajax-with-jquery-in-rails

于 2010-07-12T05:28:57.300 回答