Как мне создать табличную функцию html в рельсах? - PullRequest
0 голосов
/ 28 марта 2019

Я хочу создать вспомогательные методы в моем 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 Ответ

1 голос
/ 28 марта 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...