我有一个代表评论的(相当简单的)模型:
class Comment < ActiveRecord::Base
STATES = [:processing, :accepted, :declined]
belongs_to :note
belongs_to :author, :class_name => 'User'
validates_inclusion_of :state, :in => STATES
validates_presence_of :author
default_scope :order => 'created_at DESC'
def initialize( attributes={} )
super(attributes)
self.state ||= 'processing'
end
end
但是,每次我保存评论(其字段设置正确),作者关系总是无法保存(好吧,实际上评论保存成功,它只是遗漏了作者......)。由于对作者字段进行验证(Comment.first.valid?
为false
),因此Comment.first.author
返回nil
。
我怀疑是我以错误的方式处理state-field的默认值?如果是这样,我应该如何设置默认值?
提前给你的帮助答案 0 :(得分:4)
关于state属性,最好使用after_initialize
回调来设置默认值而不是覆盖initialize函数:
def after_initialize
self.state ||= 'processing'
end
要正确覆盖一个函数,你应该以这种方式传递params和args:
def initialize(*args,&block)
super(*args,&block)
#what-you-want-to-execute
end
请注意,通常比使用此方法更好!