1

我正在尝试覆盖初始化方法。见下文

class Restriction < ActiveRecord::Base
  RESTRICTION_TYPES = {
    less_than: "IND<X", 
    greater_than: "X<IND", 
    between: "X<IND<Y"
  }

  def initialize restriction_type_name
    super
    formula = RESTRICTION_TYPES[restriction_type_name]
  end

  private
  def formula=f
    self[:formula] = f
  end

end

当我运行时,r = Restriction.new(:between)我得到了异常:

NoMethodError: undefined method `stringify_keys' for :between:Symbol

我究竟做错了什么?

顺便说一句,我这样做是因为formula无法从外部加入属性。

4

1 回答 1

0

您不能覆盖initialize,并且无论如何您都不会工作(它会尝试设置formula在初始化方法中调用的局部变量)。但是,您可以将条件移动到您的formula=设置器中,因此它看起来像:

def formula=(restriction_type_name)
  self[:formula] = RESTRICTION_TYPES[restriction_type_name]
end
于 2013-08-02T15:18:13.740 回答