我有销售人员,产品和 sales_activities 的表格(将这些视为“交易”,但Rails保留该名称,因此我称之为sales_activities)。
对于每个销售人员,我需要动态地派生他们在给定日期的sales_total。
为此,我浏览 sales_activities 列表,并创建我的派生内容列表(作为包含salesperson_id& sales_total的对象数组)。然后我想在一个与销售人员的“索引”视图相对应的视图中显示它,但是这个视图与我已有的任何现有索引视图都不对应,因为有额外的字段( sales_total)。
我的问题是如何为动态派生数据的每个实例(salesperson_id + sales_total)最好地定义类(或其他)?看来我可以使用没有表的模型(列salesperson_id和派生的sales_total)。这样,我可以在生成动态内容时构建这些类型的实例数组,然后将生成的数组移交给相应的索引视图。然而,从阅读中看,这似乎并不是“Rails方式”。
我真的很感激如何解决这个问题的建议。我看过的例子只显示了索引视图中需要单个总计的情况,而不是每行的动态内容,而这些内容不能通过简单的“总和”或等价来推导。
[这是我正在尝试解决的实际问题的简化说明,所以我很感激帮助'动态导出的视图/模型没有表'问题,而不是对简化问题的简短回答上面概述,谢谢]
答案 0 :(得分:0)
也许一个普通的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