Rails 4:escape_javascript渲染部分不起作用

在我的Rails 4应用程序中,我试图将一些视图显示为modals (使用Bootstrap模式),而不是常规的.html.erb视图。

例如,我有一个calendar模型,在控制器中有自定义analysis操作:

 def analysis @calendar = Calendar.find(params[:id]) respond_to do |format| format.js end end 

按照本教程和其他教程中的说明 ,我尝试创建以下文件:

 # _dialog.html.erb  

 # _analysis.html.erb 

Analysis


 # analysis.js.erb // Add the dialog title $('#dialog h3').html("Calendar Analysis"); // Render calendar analysis $('.modal-body').html(' 'calendars/analysis') %>'); // Show the dynamic dialog $('#dialog').modal("show"); // Set focus to the first element $('#dialog').on('shown.bs.modal', function () { $('.first_input').focus() }) 

最后但并非最不重要的是,我使用帮助器和以下链接调用_heading.html.erb partial中的模态,在日历show.html.erb视图中

 <%= link_to ''.html_safe, calendar_analysis_path, :remote => true, 'data-toggle' => "modal", 'data-target' => '#modal-window' %> 

当我启动我的应用程序时,我得到以下错误:

 undefined method `render' for #<#:0x007fee23577ce0> 

—–

更新 :我尝试了不同的方法来渲染部分:

  • 按照这里的建议 ,我尝试了escape_javascript renderj render
  • 正如那里推荐的那样 ,我也尝试过render_to_string而不仅仅是render
  • 正如在其他问题中所推荐的那样,我甚至尝试了不同的方法来调用partial,包括render(:partial => 'calendars/analysis')(render 'calendars/analysis')

但这些解决方案都没有奏效。

—–

我已经就这个话题做了很多研究,我不得不说现在我很困惑。

虽然上面提到的这两个教程都推荐了这种方法,但其他来源, 包括这个 ,指出你不能在Rails中渲染部分资产。

因此:

  1. 我目前的代码有什么问题?
  2. 我试图使用的方法是否有意义,如果不是,我会做什么呢?

app/assets下的代码无法调用render 。 实际上,除了极少数方法之外,它几乎不能调用任何东西。

将它移动到app/views/somethings/analysis.js.erb

somethings是控制器的复数forms的名称,所以只需将它放在_analysis.html.erb附近_analysis.html.erb