Ruby:Class.new在rails控制台中给出“Class not initialized”错误

时间:2014-04-14 00:35:16

标签: ruby-on-rails ruby

我正在创建一个轻量级应用,以便为即将发生的事件创建和显示信息。我定义了一个Event类,它将args hash作为参数。初始化方法定义如下。

class Event < ActiveRecord::Base

  def initialize(args={})
    @what       = args[:what]
    @theme      = args[:theme]
    ... 
  end
end

到目前为止,这么好。然后,在Rails控制台中,我定义了一个args哈希并尝试创建一个Event实例,但得到以下错误。

[4] pry(main)> args = {what: 'what', theme: 'theme'}
=> {:what=>"what", :theme=>"theme"}
[5] pry(main)> Event.new(args)
=> #<Event not initialized>

这看起来非常简单,但我很难搞清楚。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:15)

如果要为ActiveRecord继承类执行def initialize块,则必须在此块中调用super(args),以便正确初始化子类。

但是,如果whattheme已作为模型中的列存在,则您不需要初始化方法:Event.new(args)可以正常使用。< / p>

当您需要定义ActiveRecord模式中不存在的变量(例如,设置不需要持久性的实例变量)时,一个好的做法是仅使用initialize块,但是如果您需要这样做那么使用attr_accessor是更常见的做法。