是否可以在被别名的方法中调用super来调用别名方法

时间:2019-03-09 17:05:44

标签: ruby-on-rails ruby

比方说,ActiveRecord模型车中有两个布尔字段:suv和blue

如果汽车模型中有这样定义的方法

revenuData = labels.map(r => this.weekMap[+r] && this.weekMap[+r].revenu);
budgetData = labels.map(r => this.weekMap[+r] && this.weekMap[+r].budget);

现在,如果something_true?是的,如果我调用car.suv,则“超级”有效。但是,如果我调用car.blue,它将不起作用,然后car.blue返回存储在数据库中的suv的值。反正有这项工作吗?

1 个答案:

答案 0 :(得分:1)

这是一个聪明的主意,但我认为它不会起作用。即使通过别名访问,在方法super中调用suv也只会调用suv。您可以使用元编程:

class A
  def a; 1; end
  def b; 2; end
end

class B < A
  def initialize(condition)
    @condition = condition
  end
  %i{a b}.each do |fn|
    define_method(fn) do
      @condition ? super() : "default"
    end
  end
end

puts B.new(false).a # => "default"
puts B.new(false).b # => "default"
puts B.new(true).a  # => 1
puts B.new(true).b  # => 2