Sql Ruby符号与方法

Sql Ruby符号与方法,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我正在使用RubyonRails,我是一个新手,但我有丰富的其他语言编程背景。目前我有以下代码: def self.AVERAGE_COMPUTATIONS { :a => ["(AVG(a) as a"], :b => ["(AVG(b) as b"], ... :z => ["(AVG(z) as z"], } 有人告诉我,这不是最好的方法,因为如果某些东西发生了变化,特别是SQL,调试起来会很痛苦,这是有道理的。我被告知更好的方法如下: def self

我正在使用RubyonRails,我是一个新手,但我有丰富的其他语言编程背景。目前我有以下代码:

def self.AVERAGE_COMPUTATIONS
{
  :a => ["(AVG(a) as a"],
  :b => ["(AVG(b) as b"],
  ...
  :z => ["(AVG(z) as z"],
}
有人告诉我,这不是最好的方法,因为如果某些东西发生了变化,特别是SQL,调试起来会很痛苦,这是有道理的。我被告知更好的方法如下:

def self.AVERAGE_COMPUTATIONS
{
  :a => [:avg],
  :b => [:avg],
  ...
  :z => [:avg],
}
这是有意义的,因为我基本上是在做同样的事情,所以把它全部放在一个函数中。但让我困惑的是,我使用符号作为函数。我不确定这是否可能。它是?在做了一些研究之后,我发现您可以使用
.send(:avg)
,但是如何传递参数呢


我有点困惑,所以任何澄清都将不胜感激。如果有人能告诉我如果我使用
[:avg]
函数头会是什么样子,那会很有帮助。

参数可以作为附加参数传递给
。send
。调用
.send(:avg,“a”)
将调用
#avg
方法,并将
“a”
作为第一个参数传递

我不清楚你用这种方法想要达到什么目的。如果每个值都相同,则可以完全不使用散列,而不考虑键。您根本不需要使用
.send

def self.AVERAGE_COMPUTATIONS(symbol)
  "(AVG(#{symbol}) as #{symbol}"
end
其中,symbol是代码中用于哈希查找的键


这看起来应该可以实现您想要做的事情,而不需要散列。

因此a到z都是复选框,如果选中了复选框,那么我需要计算维度的平均值,并将其显示在表中。所以我可以计算1到26个平均值。