获取文字哈希查询的Ruby方法名称

时间:2011-06-08 17:16:12

标签: ruby-on-rails ruby methods hash

在rails应用程序中,我有一个名为Record的模型的许多属性。我想设计一个方法,当在属性上调用时,返回属性的名称(它本质上是Record对象上的一个方法)。然后将此名称传递给Hash,Hash返回一个数字(为了这个例子,假设数字是一个百分比,然后乘以原始属性值得到new value)。

例如,假设我的记录有四个属性:teachersstudentsprincipalsparents。该方法将如下所示:

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

但这对我不起作用,因为我需要以前执行方法的名称。

如果您对实现目标的替代方法有任何建议,我会很乐意尝试其他方法。

1 个答案:

答案 0 :(得分:2)

Ryan,我很难理解你的问题,但我认为这就是你想要的,例如:record.teachers_percent

["teachers", "students", "principals", "parents"].each do |attrib|
  Record.class_eval <<-RUBY
    def #{attrib}_percent
      #{attrib} * PERCENTAGE[#{attrib.inspect}]
    end
  RUBY
end

虽然这可能是一个更清洁的解决方案,但要提供record.percent(:teachers)record.percent("teachers")

class Record
  def percent(attrib)
    self.send(attrib) * PERCENTAGE[attrib.to_s]
  end
end