У меня есть модель таблицы импорта CSV:
class ImportTable < ActiveRecord::Base
has_many :import_cells, :dependent => :destroy
end
class ImportCell < ActiveRecord::Base
belongs_to :import_table
end
Контроллер (отредактирован для краткости):
def show
@import_table = ImportTable.find(params[:id])
@import_cells = @import_table.import_cells
@row_index_max = @import_cells.map { |cell| cell.row_index }.max
@column_index_max = @import_cells.map { |cell| cell.column_index }.max
end
Ячейки import_cells имеют row_index
и column_index
, я группирую их по столбцам в представлении.
<table border="1" cellspacing="1" cellpadding="1">
<tr>
<% 0.upto(@column_index_max) do |column_index| %>
<th>
<%= f.select(column_index, []) %>
</th>
<% end %>
</tr>
<% 0.upto(@row_index_max) do |row_index| %>
<% row = @import_cells.select { |cell| cell.row_index == row_index } %>
<tr>
<% 0.upto(@column_index_max) do |column_index| %>
<td>
<%= row.select { |cell| cell.column_index == column_index }[0].contents %>
</td>
<% end %>
</tr>
<% end %>
</table>
Я взломал это с другого сайта, и это кажется мне чокнутым. Просто добавив:
@import_cells = @import_table.import_cells.paginate(:all, :order => "row_index ASC", :per_page => @column_index_max * 16, :page => params[:page])
Не совсем работает, так как будут * ноль объекты, созданные will_paginate
, с которыми нужно разобраться. Мне кажется, в этом слишком много логики. Какой хороший подход, чтобы взять здесь? Я думаю о добавлении метода row
для группировки столбцов в самой модели ImportTable
, но он должен быть гибким в зависимости от того, сколько столбцов в конкретной таблице. Тогда строки могут быть разбиты на страницы.
Будем благодарны за любые мысли, предложения и толчки в направлении "рельсов"!