【发布时间】:2011-06-08 17:16:11
【问题描述】:
在 Rails 应用程序中,我为一个名为 Record 的模型提供了许多属性。我想设计一个方法,当在属性上调用时,返回属性的名称(本质上是 Record 对象上的方法)。然后将该名称传递给一个哈希,该哈希返回一个数字(在本示例中,假设该数字是一个百分比,然后乘以原始属性值得到一个new value)。
例如,假设我的记录有四个属性:teachers、students、principals 和 parents。该方法将如下所示:
def name
**something here**
end
相应的new_value 方法和PRECENTAGE 哈希将如下所示:
def new_value
self * PERCENTAGE[self.name]
end
PERCENTAGE = {
"teachers" => 0.40,
"students" => 0.53,
"principals" => 0.21,
"parents" => 0.87
}
然后,要执行这整个事情,我会执行Record.students.new_value,这将根据哈希中获得的百分比返回新的学生数。
我知道要获取当前正在执行的方法的名称,您可以执行以下操作:(在 http://ryat.la/7RDk 上找到)
def this_method
__method__
end
但这对我不起作用,因为我需要 以前 执行的方法的名称。
如果您对实现我的目标的替代方法有任何建议,我很乐意尝试其他方法。
【问题讨论】:
-
您能否发布一个示例,说明您的预期方法调用是什么样的?令人困惑的部分(对我来说)是您说您在属性上调用方法的地方。你的意思是
Record.students.some_method还是some_method(Record.students)?还是别的什么? -
在上面的代码中,我使用前者,并将 self 传递给哈希。该示例看起来像
Record.students.new_value,它将返回self * PERCENTAGE[self.name]。后一种选择也可以。 (问题已编辑 - 很抱歉造成混淆!)
标签: ruby-on-rails ruby methods hash