簡體   English   中英

選擇模型的所有當前屬性以在Rails中進行驗證

[英]Selecting all current attributes of a model for validations in Rails

設置模型時,我經常發現自己在設置某些驗證時必須寫出其所有屬性。 一個常見的例子是當我使用presence參數時:

validates :first_name, :last_name, :username, :email, presence: true

有沒有一種聰明的方法可以選擇所有屬性,而不必像在rails控制台中檢索它們一樣顯式地全部寫出它們?

User.columns

並將其作為參數傳遞給validates方法?

ALL_ATTRIBUTES = User.columns

validates ALL_ATTRIBUTES, presence: true

嘗試這樣的事情,我得到了這個錯誤undefined method 'to_sym'

我不會鼓勵您或任何人這樣做。 原因是當您遇到問題時,由於將來會在一段時間后將新列添加到應用程序中而導致無法保存模型對象並引發錯誤的情況,您或新開發人員會感到奇怪嗎?!!! 。

但是,如果必須這樣做,則可以執行以下操作:

validates *self.column_names.map(&:to_sym), presence: true

在這里,Ruby中的*被稱為splat運算符這是對&:的解釋

這是一個可怕的主意。 但是您可以通過以下方式進行操作:

attrs = column_names.map { |column| column.to_sym }
validates *attrs, presence: true

為什么這是個壞主意? 因為還不清楚正在驗證什么。 它使調試變得困難,並可能導致您遇到奇怪的錯誤。 如果將來添加不需要進行狀態驗證的列,則會跳閘。 另外,有些事情我不需要出席。 例如,電子郵件字段將需要正則表達式驗證,該驗證會自動知道空白字符串無效。 因此,狀態驗證器是多余的。

提防自己太聰明了 ,因為有時候畢竟不是那么聰明。

暫無
暫無

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

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