2016-12-05 100 views
1

我正在做一些對保存子模型的嵌套屬性的父模型進行驗證。我的父母has_many孩子和我的驗證檢查,如果這些孩子的數量大於0.它工作正常編輯,因爲孩子已經創建並保存在數據庫,但對於新記錄它失敗,因爲計數總是返回0。我該如何解決這個問題?Rails - has_many依賴於驗證

我父模型的代碼如下所示:

class ArrendamentoContrato < ApplicationRecord 



    has_many :arrendamento_contrato_unidades, dependent: :destroy 

    validate :check_total_percentual_credito 

    def check_total_percentual_credito 
    if arrendamento_contrato_unidades.count > 0 && arrendamento_contrato_unidades.sum(&:percentual_credito).to_f != 100.0 
     self.errors.add :percentual_credito, I18n.t("errors.messages.percentual_credito") 
    end 
    end 
end 
+0

這可以追溯到我對最後一個問題的回答,您的父母記錄的內容尚未保存,但是您希望驗證與父模型關聯的子記錄在父模型存在之前存在(在數據庫上下文中)雞蛋問題之前還有一隻雞。這就是爲什麼我提出了將邏輯移到控制器的建議,儘管我確實看到了一些問題。我期待着這個答案。 –

+0

@CdotStrifeVII我很欣賞你的答案,我明白你的意思......但我真的不喜歡把這種類型的代碼放在控制器上......有一些方法可以在模型中實現,我相信 –

+0

是的,我是我明白,我期待聽到其他方法。 –

回答

0

您可以指定驗證的更新只

validate :check_total_percentual_credito, on: :update 
+0

但我希望在創建時驗證它。問題是,即使我有我的孩子模型,在創建檢查它不驗證,因爲這些計數總是爲0,即使我有一些 –

+0

如果父母如果父母甚至不存在於數據庫中嗎? – usha

+0

所以,我正在創建帶有子項的父項(嵌套屬性 - cocoon gem),但是,在我驗證該父項的那一刻,如果至少有一個這樣的子項,我只想執行該驗證,知道了嗎? –

0

問題解決了:改變爲.Count之間沒有.size的伎倆。希望它能幫助別人!