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

コレクション引数を使用してパーシャルをレンダリングすることをお勧めします。このタイプの操作を行うには、組み込みの Rails の利点があります。テーブルの見出しをフィールドに合わせたいと思いますか? 次の行に沿ったものでそれを行うことができます(テストされていませんが、動作するはずです)。

モデルで、クラス メソッドまたは配列を、フロント エンドに表示する属性を含む定数として定義します。

models/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>
于 2012-11-15T07:06:17.817 に答える