Ruby on rails 获取文本哈希查询的Ruby方法的名称
在rails应用程序中,我为名为Record的模型提供了许多属性。我想设计一个方法,当对属性调用时,返回属性的名称(本质上是记录对象上的一个方法)。然后将该名称传递给一个散列,该散列返回一个数字(在本例中,假设该数字是一个百分比,然后乘以原始属性值以获得一个新值) 例如,假设我的记录有四个属性:Ruby on rails 获取文本哈希查询的Ruby方法的名称,ruby-on-rails,ruby,methods,hash,Ruby On Rails,Ruby,Methods,Hash,在rails应用程序中,我为名为Record的模型提供了许多属性。我想设计一个方法,当对属性调用时,返回属性的名称(本质上是记录对象上的一个方法)。然后将该名称传递给一个散列,该散列返回一个数字(在本例中,假设该数字是一个百分比,然后乘以原始属性值以获得一个新值) 例如,假设我的记录有四个属性:教师,学生,校长,和家长。然后,该方法将如下所示: def name **something here** end 相应的new\u值方法和PRECENTAGE散列如下所示: def new_val
教师
,学生
,校长
,和家长
。然后,该方法将如下所示:
def name
**something here**
end
相应的new\u值
方法和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
,它将根据哈希中获得的百分比返回新的学生数
我知道,要获取当前正在执行的方法的名称,可以执行如下操作:(在上找到)
但这对我不起作用,因为我需要以前执行的方法的名称
如果您对实现我的目标的其他方法有任何建议,我很乐意尝试其他方法。Ryan,我很难理解您的问题,但我认为这正是您想要的,例如,
记录。教师百分比
:
["teachers", "students", "principals", "parents"].each do |attrib|
Record.class_eval <<-RUBY
def #{attrib}_percent
#{attrib} * PERCENTAGE[#{attrib.inspect}]
end
RUBY
end
你能举一个你想要的方法调用的例子吗?(对我来说)令人困惑的是,你说你调用了一个属性的方法。你是说
Record.students.some\u method
还是some\u method(Record.students)
?在上面的代码中,我使用前者,并将self传递给散列。该示例类似于Record.students.new\u值
,它将返回self*PERCENTAGE[self.name]
。不过,后一种选择也会奏效。(问题编辑-抱歉混淆了!)第二条肯定是要走的路——这正是我想要的。谢谢你,本!
["teachers", "students", "principals", "parents"].each do |attrib|
Record.class_eval <<-RUBY
def #{attrib}_percent
#{attrib} * PERCENTAGE[#{attrib.inspect}]
end
RUBY
end
class Record
def percent(attrib)
self.send(attrib) * PERCENTAGE[attrib.to_s]
end
end