【问题标题】:Partial rendering not shown部分渲染未显示
【发布时间】:2011-06-08 10:09:51
【问题描述】:

Rails 3.0.7、Windows 7、NetBeans 6.9.1、JRuby 1.5.1、Ruby 1.8.7

我有app/views/browsing/index.rhtml这个相关部分,关注render电话:

<table>
  <tr>
    <th><em><%=I18n.t('browsing.actions')%></em></th>
    <% colnames = @_controller.model_class.column_names %>
    <% colnames.each do |name| %>
    <% render  :partial => 'browsing/header_field', :locals => {:name => name} %>
    <% end %>
  </tr>

我有app/views/browsing/_header_field.rhtml,内容如下:

<% puts "DEBUG: rendering " + name + " field." %>
<% if @_controller.orderables.include?(name.to_sym) %>
<%
  otext = ''
  oopts = @_controller.orderings[name];
  if !oopts.nil?
    otext += ' ' + (oopts[:is_asc] ? '↓' : '↑')
    otext += '<span class="small">'+oopts[:prio].to_s+'</span>'
  end
%>
<th><%=link_to( name.tr('_',' '), { :controller => controller_path, :action => 'index', :o => name }, {:class => 'sort'} )%>
<%=((otext=='' || @_controller.orderings.size<=1) ? raw(otext) : link_to(raw(otext), { :controller => controller_path, :action => 'index', :o => name, :x => true }, {:class => 'delete_sort', :title => I18n.t('browsing.delete_sort')}))%></th>
<% else %>
<th><%=name.tr('_',' ')%></th>
<% end %>

调试打印(第一行)正确执行,我可以在输出窗口中看到它。我可以使用 NetBeans IDE 来逐行观察这个文件的执行情况,正如预期的那样发生

问题是这个渲染的结果不知何故被丢弃在窗口上,最终渲染的 HTML 中没有任何内容(没有表格标题单元格)。即被渲染(仅相关部分):

<table>
  <tr>
    <th><em>Actions</em></th>
  </tr>

输出窗口产生这个:

DEBUG: rendering id field.
DEBUG: rendering inm_device_id field.
DEBUG: rendering changes_id field.

Started GET "/changes_and_devices" for 127.0.0.1 at Wed Jun 08 11:50:01 +0200 2011
  Processing by ChangesAndDevicesController#index as HTML
  ChangeAndDevice Load (2.0ms)  SELECT `changes_and_devices`.* FROM `changes_and_devices` ORDER BY id desc LIMIT 20 OFFSET 0
  SQL (18.0ms)  SELECT COUNT(*) FROM `changes_and_devices`
Rendered browsing/_header_field.rhtml (6.0ms)
Rendered browsing/_header_field.rhtml (6.0ms)
Rendered browsing/_header_field.rhtml (5.0ms)
Rendered browsing/index.rhtml within layouts/application (189.0ms)
Completed 200 OK in 245ms (Views: 207.0ms | ActiveRecord: 20.0ms)

欢迎所有提示!提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 renderpartial


    【解决方案1】:

    是的,&lt;% 仅评估 &lt;%= 还显示评估代码的位置。

    你需要改变
    &lt;% render :partial =&gt; 'browsing/header_field', :locals =&gt; {:name =&gt; name} %&gt;
    &lt;%= render :partial =&gt; 'browsing/header_field', :locals =&gt; {:name =&gt; name} %&gt;

    【讨论】:

    • 天啊……好痛。谢谢!