Rails / Ruby如何通过' all'作为条件变量

时间:2014-04-28 07:16:11

标签: ruby-on-rails ruby

简单的问题

在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,*)会返回错误。如果它传入“”它会查找一年是空的。如果我把它留空,那只是错误。

3 个答案:

答案 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;这是一个更好的语法来做到这一点。但是......仍然认为它不属于一个被称为它的方式的函数;仍然认为它不属于帮助者。)