我正在创建一个轻量级应用,以便为即将发生的事件创建和显示信息。我定义了一个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>
这看起来非常简单,但我很难搞清楚。任何帮助表示赞赏。
答案 0 :(得分:15)
如果要为ActiveRecord继承类执行def initialize
块,则必须在此块中调用super(args)
,以便正确初始化子类。
但是,如果what
和theme
已作为模型中的列存在,则您不需要初始化方法:Event.new(args)
可以正常使用。< / p>
当您需要定义ActiveRecord模式中不存在的变量(例如,设置不需要持久性的实例变量)时,一个好的做法是仅使用initialize
块,但是如果您需要这样做那么使用attr_accessor
是更常见的做法。