Ruby on rails Rails/Ruby如何通过&x27;全部';作为条件变量

Ruby on rails Rails/Ruby如何通过&x27;全部';作为条件变量,ruby-on-rails,ruby,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\u cust

简单问题

在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\u customer\u year\u revenue(1234562014)
。我如何调用相同的方法,但使用“所有”年。如果我使用SQL,它将是sum\u customer\u year\u revenue(123456,*),但这将返回一个错误。如果它在“”中传递,它将寻找一个空的年份。如果我把它留空,它也只会出错。

不能用这种形式。创建一个新助手,
sum\u customer\u total\u revenue
。或者在这个函数中引入更多的逻辑,但这并没有那么漂亮

而且,不确定这些人应该是什么帮手;这种东西属于模型。如果需要,请确保模型将这些信息从控制器(而不是直接包含在辅助对象中)传递到视图

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

(编辑:上传jbmyid;这是一种更好的语法。但是…仍然认为它不属于按调用方式调用的函数;仍然认为它不属于帮助程序。)

不能使用这种形式。创建一个新助手,
sum\u customer\u total\u revenue
。或者在这个函数中引入更多的逻辑,但这并没有那么漂亮

而且,不确定这些人应该是什么帮手;这种东西属于模型。如果需要,请确保模型将这些信息从控制器(而不是直接包含在辅助对象中)传递到视图

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
(编辑:上传jbmyid;这是一种更好的语法。但是…仍然认为它不属于以调用方式调用的函数;仍然认为它不属于帮助程序。)

这可能对你有用。在本例中,若要检索全年的总和,则无需传递第二个参数

这可能对你有用。在这种情况下,如果要检索全年的总和,则无需传递第二个参数。

将方法更改为:

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)
将方法更改为:

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)

很酷,谢谢你的建议。仍在学习,因此感谢您的指导。非常感谢您的建议。仍在学习,因此感谢您的指导。谢谢jbmyid,这可能是我前进的方向。我也接受了阿玛丹的建议。我将把逻辑移到模型中,然后有一系列带有逻辑位的函数。我可能有多达30或40个不同的函数用于计算,这些函数只是基于传递的变量的微小变化,或者只是“全部”。当然,它必须在模型中。我刚才给了你一个如何实施的方向。:)谢谢jbmyid这可能是我前进的方向。我也接受了阿玛丹的建议。我将把逻辑移到模型中,然后有一系列带有逻辑位的函数。我可能有多达30或40个不同的函数用于计算,这些函数只是基于传递的变量的微小变化,或者只是“全部”。当然,它必须在模型中。我刚才给了你一个如何实施的方向。:)如果我将nil变量切换到客户id上,会不会中断?即:总客户年收入(无,2014年)。我可以在方法中添加'customer\u id=nil'和'if customer\u id',这样它就可以互换了。上面的代码无法正确处理nil customer\u id。但是当你从一个空的散列开始,只将customer_id添加到散列中,当它存在时(比如年份),它应该可以工作。如果我将nil变量切换到customer id上,这会中断吗?即:总客户年收入(无,2014年)。我可以在方法中添加'customer\u id=nil'和'if customer\u id',这样它就可以互换了。上面的代码无法正确处理nil customer\u id。但是当你从一个空的散列开始,只将customer_id添加到散列中,当它存在的时候(比如年份),它应该可以工作。