簡體   English   中英

Rails如何防止記錄的先前實例被更新?

[英]Rails how to prevent previous instances of a record from being updated?

我的問題可能有點令人困惑,但我會盡力解釋。 基本上,我創建的記錄一旦創建就需要保存,並且在用戶訪問並更新記錄時需要保留其先前的信息。 我不知道執行此操作的正確方法,但是我考慮了一些方法。

我有兩個關聯的表:

class Invoice < ApplicationRecord
  belongs_to :customer
end

class Customer < ApplicationRecord
    has_many :invoices, :dependent => :destroy
end

因此,如果用戶要去更新客戶的信息,我需要弄清楚如何保存發票數據(客戶數據)。 (在現實生活中,如果客戶的電子郵件發生了更改,則顯然不會更改現有的發票。)發票一旦創建,基本上就不應該被更改,但是它們具有與每個客戶相關聯的客戶信息,我需要以某種方式保留舊信息以用於每張發票。

基本上,我現在要做的就是禁用所有字段,以使用戶無法編輯客戶信息(我也將模型更改為attr_readonly並在所有字段中傳遞了),但是可以,但是由於客戶信息的限制而不能改變了。

有沒有辦法獲得我所追求的功能? 如果是這樣,理想情況下,客戶信息將是可編輯的,但對於與該客戶相關聯的先前創建的發票記錄,則不會更改。

我的方法剛剛好嗎? 我應該重新考慮我的協會嗎? 還是應該僅修改客戶信息和發票信息,如果客戶信息發生變化,用戶將只創建新記錄? (考慮到諸如景觀設計師之類的總承包商為客戶工作並創建發票。如果更改了客戶電話號碼,則可以在應用程序中編輯他們的電話號碼,但不應刪除以前為該客戶創建的所有發票。客戶信息或多或少只是為了參考,可以將客戶標記為重復出現,因此這些客戶信息可能會發生更改,這會造成我要解決的問題)

一種可能的方法是在創建發票時將顯示發票所需的所有數據保存在發票表中。 客戶可以更改其數據,但發票將保持不變。

您也可以考慮在單獨的模型中提取一些數據。 例如EmailAddressAddress 然后,客戶可以創建一個或多個新電子郵件地址,但仍保留舊數據。 但是,此方法僅在某種程度上起作用。 這可能會導致一些人為創建的名稱笨拙的模型。 這也是一個更復雜的解決方案,因為您必須記住哪些模型是只讀的,哪些模型可以自由更新。

因此,我認為將與發票相關的所有內容都保存在一個表中是一個更好,更防錯的解決方案,即使存在一些冗余也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM