0

为什么从我的视图调用时这不会产生一个表?使用 fields_table(@user, ["id", "username"]) 我没有得到 tbody 的 trs 或 tds,但我得到了其他所有内容。

def fields_table(obj, fields)
  return false if obj.nil?
  content_tag(:table) do
    thead = content_tag(:thead) do
      content_tag(:tr) do
        content_tag(:td, "Property") + content_tag(:td, "Value")
      end
    end
    tbody = content_tag(:tbody) do
      fields.each do |name|
        content_tag(:tr) do
          content_tag(:td, name) + content_tag(:td, obj.read_attribute(name))
        end
      end
    end
    thead + tbody
  end
end
4

2 回答 2

0

这段代码只是遍历字段。它不返回任何内容,因此封闭tbody不会有任何内容。

tbody = content_tag(:tbody) do
  fields.each do |name|
    content_tag(:tr) do
      content_tag(:td, name) + content_tag(:td, obj.read_attribute(name))
    end
  end
end

您需要像在代码的其他部分中所做的那样返回一些内容,或者将其更改为如下内容:

tbody = content_tag(:tbody) do
  fields.map do |name|
    content_tag(:tr) do
      content_tag(:td, name) + content_tag(:td, obj.read_attribute(name))
    end
  end.join
end
于 2012-11-15T03:10:09.620 回答
0

我建议使用 collection 参数渲染一个部分,并内置 rails goodness 来执行这种类型的操作。我猜你希望表格标题与字段对齐?您仍然可以按照以下方式执行此操作(尚未测试,但应该可以),

在您的模型中,将类方法或数组定义为包含您要在前端显示的属性的常量,例如

模型/用户.rb

VisibleFields = [:id, :username]

#workaround for toplevel class constant warning you may get
def self.visible_fields
  User::VisibleFields
end

意见/用户/index.html.erb

<table>
  <thead>
    <tr>
    <% User.visible_fields.each do |field| %>
      <th><%= field.to_s.titleize %></th>
    <% end %>
    </tr>
  </thead>
<tbody>
<%= render :partial => 'user', :collection => @users %>
</tbody>
</table>

**views/users/_user.html.erb**

<tr>
<% user.visible_fields.each do |field| %>
  <td class="label"><%= field.to_s.titleize %></td><td class="value"><%= user.send(:field) %></td>
<% end %>
</tr>
于 2012-11-15T07:06:17.817 回答