所以的情況下想出了在工作中,我想在這裏討論這個問題,因爲我們不能讓我們之間的協議:如何在Rails上正確執行條件只讀記錄?
我們有兩個型號,Order
和Passport
,它們的方式,訂單HAS_ONE相關護照和護照has_many命令。無論何時訂單完成,其相關護照必須「鎖定」,即變爲只讀(該信息已用於清除海關,因此以後無法更改)。我們要加強在Passport
模型規則,我們已經想到了以下選項:
- 創建驗證。缺點:當技術上記錄良好時(雖然不能保存),會有記錄產生
valid? => false
。例如,如果其他記錄上有validates_associated :passport
,那可能是一個問題。 - 覆蓋
readonly?
方法。缺點:這會在嘗試更新記錄時引發異常,但您會希望調用save
方法不會引發任何記錄。 - 創建
before_save
回調。這有兩種風格:引發異常(非常類似於readonly?
選項)或添加@error
並返回false
停止回調鏈。缺點:在適當的驗證之外添加驗證錯誤可能被認爲是不好的做法。此外,您可能會發現自己撥打valid?
並獲得true
,然後致電save
並獲得false
。
這種情況讓我們想到了很多關於驗證和Rails之間的關係。這個記錄究竟是什麼意思是valid?
?這是否意味着save
將起作用?
我想傾聽您的意見,以瞭解這種情況。也許最好的方法不是三者之一!謝謝!
我想,如果護照對象的順序的更新之前初始化將失敗。 – xlembouras
你說得對,這還不夠。 – Grych
與重寫'readonly?'方法不一樣的行爲?我的意思是,當試圖「保存」記錄時會發生什麼?例外? – Ferdy89