2009-10-09 81 views

回答

45

你想用attr_readonly:爲只讀上市

屬性將被用來創建一個新的記錄,但更新操作會忽略這些字段。

class Customer < ActiveRecord::Base 
    attr_readonly :your_field_name 
end 
+0

這是對您的問題的正確答案,但對您的實際問題的「正確」解決方案有點不同......請參閱有關其他問題的評論。 – averell 2011-02-14 11:13:04

+0

否則+1回答。 – averell 2011-02-14 14:10:10

2

這場總是和由定義「正確」(即準確的現實表示)在插入時?

沒有用戶在第一次進入該字段時(以及在您的方案中:只有)時間?

+1

實際上用戶根本沒有輸入,它由控制器設置。我想防止的是有人用修改後的請求修改它。 – fresskoma 2009-10-09 12:15:25

+8

在這種情況下,您根本不想亂動「只讀」字段。你想要做的是在模型中使用'attr_protected'語句來防止字段被大量更新改變。甚至更好:使用'attr_accessible'使所有選定的字段可用於批量更新。 – averell 2011-02-14 14:08:18

+2

要在這裏:我認爲attr_readonly正確的用例是當改變該字段會破壞你的數據完整性。我有一個字段:valid_at,並且永遠不應該改變這個字段,因爲這意味着核心算法會出現一些錯誤。如果發生這種情況,這一切都在甲板上。所有數據可能不好。因此,我絕不需要改變它,而是寧願防止它被其他代碼中的錯誤所改變。如果它曾經試圖改變,我想非常大聲地炸燬。 – Houen 2016-04-13 06:58:48

相關問題