Rails:与class_name的关系无法正确保存?

时间:2011-06-22 18:56:11

标签: ruby-on-rails ruby-on-rails-3

我有一个代表评论的(相当简单的)模型:

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的默认值?如果是这样,我应该如何设置默认值?

提前给你的帮助

1 个答案:

答案 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

请注意,通常比使用此方法更好!