如何在Rails中创建html helper表函数?

时间:2019-03-28 19:01:52

标签: html ruby-on-rails ruby

我想在我的红宝石中创建辅助方法来制作一个像这样的表:

<table>
   <legend>Test Table</legend>
<thead>
<th>name</th>
<th>age</th>
<th>occupation</th>
</thead>
<tbody>
<tr><td>Josh</td><td>32</td><td>Ditch Digger</td></tr>
<tr><td>John</td><td>54</td><td>Burger Flipper</td></tr>
<tr><td>Jake</td><td>21</td><td>Couch Potato</td></tr>
</tbody>
</table>

我的数据是红宝石哈希,看起来像这样:

root
  users
  {'name'=>'Josh', 'age'=>'32','job'=>'Ditch Digger'},
  {'name'=>'John', 'age'=>'54','job'=>'Burger Flipper'},
  {'name'=>'Jake', 'age'=>'21','job'=>'Couch Potato'}

尝试创建该表的函数

def data_table_personnel(source)
  if subdata = source&.dig('root', 'users')
    h.content_tag :table do
      h.content_tag :tr do
         h.content_tag :td subdata.name
         h.content_tag :td subdata.age
         h.content_tag :td subdata.job
         end
      end
    end
  end
end

我在项目中制作了很多表格,因此,如果可能的话,我想避免使用ERB。

1 个答案:

答案 0 :(得分:1)

def data_table_personnel(source)
  users = source&.dig('root', 'users')
  return if users.blank?

  h.content_tag :table do
    users.map do |user|
      # generate '<tr>' for each user
      h.content_tag :tr do
         [:name, :age, :job].map do |attr|
           # generate '<td>' for each user attribute
           h.content_tag :td user[attr]
         end.join # join <td>s
      end
    end.join # join <tr>s
  end
end