dar*_*ves 9 ruby ruby-on-rails
我正在创建一个轻量级应用程序来创建和显示即将发生的事件的信息.我定义了一个Event类,它将args hash作为参数.初始化方法定义如下.
class Event < ActiveRecord::Base
def initialize(args={})
@what = args[:what]
@theme = args[:theme]
...
end
end
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.然后,在Rails控制台中,我定义了一个args哈希,并尝试创建一个Event实例,但得到以下错误.
[4] pry(main)> args = {what: 'what', theme: 'theme'}
=> {:what=>"what", :theme=>"theme"}
[5] pry(main)> Event.new(args)
=> #<Event not initialized>
Run Code Online (Sandbox Code Playgroud)
这看起来非常简单,但我无法搞清楚.任何帮助表示赞赏.
Ste*_*zyn 16
如果要def initialize
为ActiveRecord继承类执行块,则必须super(args)
在此块内调用,以便正确初始化子类.
但是,如果what
并且theme
已经作为模型中的列存在,则不需要initialize方法:Event.new(args)
将立即正常工作.
一个好的做法是只initialize
在需要定义ActiveRecord模式中不存在的变量时才使用块(例如,设置不需要持久性的实例变量),但是如果你需要这样做,那么这是更常见的做法attr_accessor
.