2011-06-22 23 views
0

我有代表的評論的(很簡單)模型:Rails:與class_name的關係無法正確保存?

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.authornil),因此這可以返回Comment.first.valid?返回false

我的懷疑是我以錯誤的方式處理狀態字段的默認值?如果是這樣,我應該如何設置默認值呢?提前

+0

您可能想看看https://github.com/pluginaweek/state_machine – Luke

+0

這是否僅在創建新評論或更新現有評論時發生? – Luke

+0

當我更新現有評論時,也會發生這種情況 – DeX3

回答

4

關於狀態屬性,它會更好

THX對您的幫助,使用after_initialize回調設置默認,而不是壓倒一切的初始化函數:

def after_initialize 
self.state ||= 'processing' 
end 

要正確重寫函數,你應該通過這樣的參數和參數:

def initialize(*args,&block) 
    super(*args,&block) 
    #what-you-want-to-execute 
end 

請注意,通常有比使用th是!

+0

k,thx我改變了這一點。雖然 – DeX3

+0

沒有解決您的問題,但將您的驗證更改爲:'validates_presence_of:author_id',請參閱[doc](http://api.rubyonrails.org/classes/ActiveModel/Validations/HelperMethods.html#method- i-validates_presence_of) –

+0

由於該列實際上被命名爲'author',因此這將不起作用。 – DeX3

相關問題