jQuery GET Rails控制器方法

时间:2013-12-18 04:06:35

标签: jquery ruby-on-rails ruby-on-rails-3 get rails-routing

jQuery .get()如何使用Rails方法?我在名为documents的{​​{1}}控制器中设置了一个方法,我想在一个单独的JS文件中从JS方法访问该方法。通过做一些研究,我发现使用templates是访问Rails方法的最佳方式,但是当我这样做时,.get(),只是控制台记录整个var templates = $.get("/documents#templates", function (data) { console.log(data) } HTML DOM结构

我猜我需要“劫持”路线,但是我尝试添加自定义路线,控制台日志仍然返回HTML页面,甚至没有到达我的Rails控制器。

如果有帮助(尽管我对此表示怀疑,因为完全删除它不会改变控制台日志结果),这是控制器中的/documents方法:

templates

2 个答案:

答案 0 :(得分:0)

您想要归还什么?根据您的需要,有几种不同的方法。

$(data).find('selector')是最不优雅的方式。您可以使用jQuery从完整响应中提取所需内容。

respond_with(@output, :layout => !request.xhr? )将在没有周围的application.html文件的情况下呈现页面。以下是为jQuery呈现不同部分的方法。

respond_with(@output) do |format|
  format.html { render partial: 'templates' if request.xhr? }
end

如果这是你需要的,你也可以轻松地发回JSON。这里有一篇关于Rails AJAX的各种方法的好文章:http://madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html

答案 1 :(得分:0)

如果您想用HTML片段回复jQuery的GET请求,可以考虑渲染partial layout(不包括完整的应用程序布局)。在您的控制器中,响应可能如下所示:

def templates
  @templates = DocumentTemplate.all

  if request.xhr?
    render :partial => 'templates', locals: {:templates => @templates}
  else
    # respond with your normal layout if required
  end
end

然后在app/views/documents/文件夹中创建名为_templates.html.haml(或.erb)的部分文件。请注意部分名称中的前导下划线。

您可以访问templates局部变量以在您的部分文件中循环(此处的语法适用于HAML):

- templates.each do |template|
   # do what's required to present each template instance here

然后你的jQuery GET请求应该只收到HTML的部分片段:

$.get("/documents/templates", function(data) {
  console.log('data');
  alert("Load was performed.");
});