Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery和rails加载分部代码_Jquery_Ruby On Rails_Load_Partial - Fatal编程技术网

使用jquery和rails加载分部代码

使用jquery和rails加载分部代码,jquery,ruby-on-rails,load,partial,Jquery,Ruby On Rails,Load,Partial,我很好奇用jquery加载rails分部的最佳方法是什么。到目前为止,我尝试了一种不起作用的解决方案: $('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() { alert('Load was performed.'); }); 最好的解决方案是为此构建单独的操作和/或控制器,并设置路由吗?我这样问是因为让第一个解决方案变得更容易,也许不是那么轻松 谢谢。您应该无法从HTTP请求访问模板文件(.er

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

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() {
alert('Load was performed.');
});
最好的解决方案是为此构建单独的操作和/或控制器,并设置路由吗?我这样问是因为让第一个解决方案变得更容易,也许不是那么轻松


谢谢。

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

我不确定Rails,但我想您需要创建一个单独的控制器(或其他什么)来实现这一点


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

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

def image_gallery
  render :partial => "image_gallery"
end
还有一个名为jRails的插件,它将标准ajax助手(使用原型)替换为等效的面向jquery的助手。在你的情况下,你会使用

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %>
“imagecontent”,:url=>“/newslettes/image\u gallery”)%%>
更重要的是,在Rails3中,您将不需要它。请参阅。

以下是您想要的:


使用rails 3,您可以

控制器

@content = '/some/partial'
@content = render :partial=>"/users/cool_partial"
视图-haml.erb(html.erb)或js.erb

$('#myDiv').html("<%= escape_javascript render @content %>");
打电话给你的js

myFunction(#{@content.to_json})
你的功能

myFunction = function(content){

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

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

def get_partial
  render 'some/partial'
end
希望这有助于另一种选择:

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

ok-感谢您的洞察力。我将相应地构造它。作为说明,您也不能使用.html()来加载您的分区。即使你用ruby代码调用它。这是因为它在引号之间呈现整个表单,并将所有内容弄乱。如果我知道的话,我会建议另一种方法,尽管我自己也在寻找。