简单的问题
在rails中我有一个ApplicationHelper方法
def sum_customer_yearly_revenue(customer_id, year)
sum_customer_yearly_revenue = Sale.sum(:net_amount, :conditions => ['customer_id = ? AND financial_year = ?', customer_id, year])
end
在我看来,我打电话给sum_customer_yearly_revenue(123456, 2014)
。如何使用相同的方法,但使用'all'年。如果我使用的是SQL,那么sum_customer_yearly_revenue(123456,*)会返回错误。如果它传入“”它会查找一年是空的。如果我把它留空,那只是错误。
答案 0 :(得分:2)
def sum_customer_yearly_revenue(customer_id, year="all")
sales = Sale.where(customer_id: customer_id)
sales = sales.where(year: year) if year!="all"
sales.sum(:net_amount)
end
这可能对您有用。在这种情况下,如果您想要检索全年的总和,则无需传递第二个参数。
答案 1 :(得分:2)
将方法更改为:
def sum_customer_yearly_revenue(customer_id, year = nil)
conditions = { :customer_id => customer_id }
conditions.merge!(:financial_year => year) if year
Sale.sum(:net_amount, :conditions => conditions)
end
并称之为:
sum_customer_yearly_revenue(123456)
答案 2 :(得分:1)
不能以这种形式出现。建立一个新助手sum_customer_total_revenue
。或者在这个函数中引入更多逻辑,但这并不是很漂亮。
另外,不确定那些应该是什么样的助手;那种东西属于一个模型。如果需要,请确保模型将这些信息传递给视图,方法是将其包含在控制器中,而不是直接包含在帮助器中。
(编辑:upvoted jbmyid;这是一个更好的语法来做到这一点。但是......仍然认为它不属于一个被称为它的方式的函数;仍然认为它不属于帮助者。)