为什么从我的视图调用时这不会产生表格?使用fields_table(@ user,[“id”,“username”])我没有得到tbody's 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
答案 0 :(得分: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
答案 1 :(得分:0)
我建议使用collection参数渲染部分,并建立rails goodness来执行此类操作。我猜你想让桌面标题与字段对齐吗?您仍然可以通过以下方式执行此操作(未经过测试,但应该可以使用),
在您的模型中,将类方法或数组定义为包含要在前端显示的属性的常量,例如
<强>模型/ user.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>