Как представить динамически полученные данные?(модель без стола?) - PullRequest
0 голосов
/ 31 мая 2011

У меня есть таблицы для продавцов , продуктов и sales_activities (считают, что это «транзакции», но Rails оставляет за собой это имя, поэтому яназывая их sales_activities).

Для каждого продавца мне нужно динамически получить их sales_total за определенный день.

Для этого я просматриваю список sales_activities и создайте мой производный список контента (как массив объектов, содержащих salesperson_id & sales_total).Затем я хочу отобразить его в виде, несколько эквивалентном представлению «index» salespeople , но это представление не соответствует ни одному из существующих представлений index, которые у меня уже есть, из-за дополнительного поля (sales_total).

Мой вопрос: как мне лучше определить класс (или что-то еще) для каждого экземпляра моих динамически производных данных (salesperson_id + sales_total)?Кажется, я мог бы использовать модель без таблицы (со столбцами salesperson_id и производными sales_total).Таким образом, я мог бы создать массив экземпляров этих типов при генерации динамического содержимого, а затем передать полученный массив в соответствующий индексный просмотр.Тем не менее, после прочтения, это не похоже на «путь Rails».

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

[Thisэто упрощенное объяснение фактической проблемы, которую я пытаюсь решить, поэтому я был бы признателен за помощь в решении проблемы «динамически полученное представление / модель без таблицы», а не за краткий ответ на упрощенную проблему, изложенную выше, спасибо]

1 Ответ

0 голосов
/ 31 мая 2011

Может быть, обычный класс Ruby справился бы с задачей?

class SalesStats
  def initialize(sales_person, date_range = Date.today)
    @sales_person = sales_person
    @date_range = date_range
  end

  def results
    # return a array or hash (anything which responds to an 'each' method), e.g:
    SalesActivity.find(:all, :conditions => { :sales_person => @sales_person, :created_at => @date_range }).group_by(&:sales_person).collect { |person, sales_activities| { :person => person, :total => sales_activities.sum(&:price) } }        
  end
end

в представлении:

<% @sales_stats.results.each do | stat | %>
 <%= stat[:person] %> - <%= stat[:total] %>
<% end %>

Однако, как сказал Миша в комментариях, этого можно достичь с помощью метода на SalePerson:

class SalesPerson < AR::Base
  has_many :sales_activities

  def total_sales(date_range)
    sales_activities.find(:all, :conditions => { :created_at => date_range }).collect { ... }
  end
end

Примечание: date_range может быть одной датой или диапазоном, например, (Date.today-7.days) .. Date.today

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...