如何在rails 4中渲染部分来自.js.erb的文件?

时间:2014-08-19 11:42:48

标签: ruby-on-rails ruby

在我的rails应用程序中,我在/ assets / javascript文件夹中有dragdrop.js.erb。其中我有一个ajax块,它应该在div中使用on click动作呈现部分。我尝试了很多东西,但我无法让它发挥作用。任何帮助将不胜感激。

以下是代码:

 $.ajax({  
   type: "GET",    
   url: "<%=  Rails.application.routes.url_helpers.cookbooks_path %>",
   success: function(resp){
  $("#property").load("<%= escape_javascript (render :partial => 'recipes/package_form') %>") 
   }

2 个答案:

答案 0 :(得分:6)

您的问题是,您尝试在render中使用assets,但是render is not available in assets

您应该将.js.erb文件移至app/views

下的相应目录

以下是其他一些类似的问题:

  1. Rendering A Partial In Assets
  2. Rails JS ERB File Cannot Find Method Render
  3. When rendering a partial from tasks.js.coffee.erb - undefined, render

答案 1 :(得分:5)

资产管道

首先,您需要确保直接在javascript中使用任何Rails动态路径助手。

问题在于,如果您预先编译资产管道,您通常会发现这些动态路径帮助程序无法正常工作。尽管它没有“错误” - 我倾向于将Rails后端代码与前端完全分开,以确保应用程序的多功能性:

#app/assets/javascripts/application.js
$(document).on("click", ".element", function(){
   $.ajax({  
     type: "GET",    
     url: "/cookbooks"
  });
});

这将向您的控制器后端发送“裸”Ajax请求(没有参数/正文):

#app/controllers/cookbooks_controller.rb
Class CookbooksController < ApplicationController
   def index
      @cookbooks = Cookbook.all
      respond_to do |format|
        format.html
        format.js #-> loads /views/cookbooks/index.js.erb
      end
   end
end

这里的诀窍是,您现在可以使用渲染部分所需的参数填充index.js.erb文件:

#app/views/cookbooks/index.js.erb
$("#property").html("<%=j render :partial => 'recipes/package_form' %>") 

-

这应该对你有用