что такое способ ruby ​​/ rails / DRY / MVC для отображения матрицы данных с цветовой кодировкой - PullRequest
0 голосов
/ 27 мая 2011

До сих пор разделение MVC не доставляло мне больших проблем, но я должен допустить, что «правильный» способ ruby ​​/ rails / dry / mvc для решения отображения табличных данных с цветовой кодировкой ускользал от меня.

Мое приложение имеет страницу, которая отображает 7 столбцов (дней недели) с 20 строками данных (20 различных продуктов), которые варьируются от 0 до 100 в каждой ячейке.Каждое значение составляет в среднем от 50 до 500 строк в базе данных.

Таким образом, в таблице отображаются 7x20 = 140 отдельных «усредненных» вычислений, представляющих до 500 строк данных в каждой.

Из-за объема данных, отображаемых пользователю, нам нужно раскраситькодируем ячейки на основе значения: <25 = красный, 25..75 = желтый,> 75 = зеленый

наш метод, который выполняет вычисления, это product.get_daily_average (date)

Мывы используете HAML, между прочим.

Проблема, которую я имею, состоит в том, чтобы выяснить, куда поместить код, определяющий цвет, применяемый к каждой ячейке ...

... если это произойдет, если/ затем код, чтобы установить стиль ячейки (цвет) в представлении?Это логичное место для помощника?Или метод модели, который извлекает данные, «возвращает» фрагмент HTML с кодом цвета + данные (вместо того, чтобы возвращать значение и позволить представлению обрабатывать цвет)?

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Обычно это тот тип вещей, который вы бы добавили в вспомогательный метод.

По вашему мнению, вы бы сделали что-то вроде этого (извините, не знаю, хамл, этот пример с erb)

<%= daily_average_cell(product) %>

А потом в помощник

def daily_average_cell(product)
  value = product.get_daily_average
  color = daily_average_color(value) # probably just make this method right here in the same helper module
  content_tag(:td, value, :class => color)
end
0 голосов
/ 27 мая 2011

Помощники вида обычно идут в файл в app/helpers, который соответствует контроллеру, отображающему представления. Например (упрощено для краткости):

app/helpers/product_helper.rb:

module ProductHelper
  def class_for_product_date(product, date)
    case product.get_daily_average(date)
    when 0..24
      "product_cell_red"
    when 25..75
      "product_cell_yellow"
    when 76..100
      "product_cell_green"
    else
      ""
    end
  end
end

app/views/products/show.html.haml

@product.each do |product|
  %td{:class => class_for_product_date(product, date)}
    = product.get_daily_average(date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...