2013-02-07 91 views
2

我無法通過關聯從has_many驗證模型。下面是相關機型:Rails has_many:通過驗證

廣播模式

class Broadcast < ActiveRecord::Base 

    attr_accessible :content, 
        :expires, 
        :user_ids, 
        :user_id 

    has_many :users, through: :broadcast_receipts 
    has_many :broadcast_receipts, dependent: :destroy 

    validates :user_id, presence: true 
    validates :content, presence: true 

end 

廣播收據型號

class BroadcastReceipt < ActiveRecord::Base 

    belongs_to :broadcast 
    belongs_to :user 

    attr_accessible :user_id, :cleared, :broadcast_id 

    validates :user_id  , presence: true 
    validates :broadcast_id   , presence: true 
end 

還擁有通過廣播收據have_many廣播收據用戶的關聯。

的問題似乎是與以下行:

validates :broadcast_id   , presence: true 

每當我試圖創建一個廣播,我拿回滾未給出錯誤信息。但是,刪除上面的行時,一切都按預期工作。

這看起來像是在廣播收據創建之前沒有保存廣播的問題。
有沒有什麼辦法可以驗證在接收模型上設置的broadcast_id?

+0

您可以創建一個自定義驗證器,如:validate:broadcast_id_exists'並檢查您的驗證是否存在數據庫中的廣播。 – Kaeros

回答

1

代碼結構中可能存在一些問題。你可以試試這個版本。

class Broadcast < ActiveRecord::Base 
    # I assume these are the recipients 
    has_many :broadcast_receipts, dependent: :destroy 
    has_many :users, through: :broadcast_receipts 

    # I assume this is the creator 
    validates :user_id, :content, presence: true 
    attr_accessible :content, :expires, :user_id, :user_ids 
end 

class BroadcastReceipt < ActiveRecord::Base 
    belongs_to :broadcast 
    belongs_to :user 

    # You should be able to validate the presence 
    # of an associated model directly 
    validates :user, :broadcast, presence: true 

    attr_accessible :cleared 
end 
+0

我明白爲什麼這應該起作用,但它仍然沒有,它回滾沒有錯誤。有趣的是,它在升級到Rails 3.2.11之前曾經工作過,但我無法在變更日誌中找到任何會導致它停止工作的內容。在廣播實際保存之前它仍然試圖保存收據,所以它沒有broadcast_id傳入。 – Ammar