在我的Rails 4应用中,我尝试将一些视图显示为modals
(使用Bootstrap模式),而不是常规的.html.erb
视图。
例如,我有一个calendar
模型,控制器中有自定义analysis
操作:
def analysis
@calendar = Calendar.find(params[:id])
respond_to do |format|
format.js
end
end
按照this tutorial和that other tutorial中的说明,我正在尝试创建以下文件:
# _dialog.html.erb
<div class="modal fade" id="dialog" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close"
data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span></button>
<h3 class="modal-title"></h3>
</div>
<div class="modal-body">
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
# _analysis.html.erb
<p><%= @calendar.name %> Analysis</p>
# analysis.js.erb
// Add the dialog title
$('#dialog h3').html("Calendar Analysis");
// Render calendar analysis
$('.modal-body').html('<%= j render(:partial => '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
帮助程序和以下链接调用日历show.html.erb
视图内呈现的<%= render 'analysis' %>
部分模式:
<%= link_to '<i class="glyphicon glyphicon-dashboard"></i>'.html_safe, calendar_analysis_path, :remote => true, 'data-toggle' => "modal", 'data-target' => '#modal-window' %>
当我启动应用程序时,我收到以下错误:
undefined method `render' for #<#<Class:0x007fee248d8118>:0x007fee23577ce0>
- - - -
更新:我尝试过不同的渲染方式:
escape_javascript render
和j render
。render_to_string
而非render
。render(:partial => 'calendars/analysis')
和(render 'calendars/analysis')
调用部分内容的不同方式。但这些解决方案都没有奏效。
- - - -
我对这个话题做了很多研究,我不得不说现在我很困惑。
虽然上面提到的两个教程都推荐了这种方法,但其他来源including this one指出,你无法在Rails中渲染部分资产。
因此:
答案 0 :(得分:2)
app/assets
下的代码无法调用render
。实际上它除了极少数方法外几乎不能调用任何东西。
将其移至app/views/somethings/analysis.js.erb
其中somethings
是复数形式的控制器名称,所以只需将其放在_analysis.html.erb
附近。