ruby on rails-如何表示动态派生的数据?(没有桌子的型号?)



我有销售人员产品sales_activity的表(将它们视为"交易",但Rails保留这个名称,所以我称它们为sales_activity)。

对于每个销售人员,我需要动态地导出他们在某一天的sales_total。

为此,我运行sales_activity的列表,并创建我的派生内容列表(作为一个包含salespen_id&sales_total的对象数组)。然后,我想将其显示在一个与sales的"索引"视图相当的视图中,但由于额外的字段(sales_total),该视图与我现有的任何索引视图都不对应。

我的问题是,我如何最好地为我的动态派生数据的每个实例定义类(或其他什么)(salesperm_id+sales_total)?我似乎可以使用一个没有表的模型(有列salespeperson_id和派生的sales_total)。这样,我就可以在生成动态内容时构建这些类型的实例的数组,然后将生成的数组交给相应的索引视图。然而,从周围的阅读来看,这似乎不是"Rails方式"。

我真的很感激关于如何解决这个问题的建议。我看到的示例只显示了在索引视图中需要单个总合计的情况,而不是不能通过简单的"sum"或等效方法派生的每行动态内容。

[这是对我试图解决的实际问题的简化解释,因此我非常感谢"无表动态派生视图/模型"问题的帮助,而不是对上述简化问题的简短回答,谢谢]

也许一个普通的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 %>

然而,正如mischa在评论中所说,这同样可以使用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

最新更新