Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取文本哈希查询的Ruby方法的名称_Ruby On Rails_Ruby_Methods_Hash - Fatal编程技术网

Ruby on rails 获取文本哈希查询的Ruby方法的名称

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

在rails应用程序中,我为名为Record的模型提供了许多属性。我想设计一个方法,当对属性调用时,返回属性的名称(本质上是记录对象上的一个方法)。然后将该名称传递给一个散列,该散列返回一个数字(在本例中,假设该数字是一个百分比,然后乘以原始属性值以获得一个新值)

例如,假设我的记录有四个属性:
教师
学生
校长
,和
家长
。然后,该方法将如下所示:

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