我可能沒有找到正確的單詞以獲得答案,所以你是我的最後一次機會。在rails中創建一個新的列數據類型
我期待創造一個軌道新數據類型,例如: t.israeli_id
它得到通過自定義的驗證方法,並根據其添加的錯誤。
我將在幾個表中使用這個數據類型,所以使它成爲一個字符串,並在每個model.rb中傳遞驗證函數將非常乾燥。
我正在使用Postgresql,以防萬一。
我可能沒有找到正確的單詞以獲得答案,所以你是我的最後一次機會。在rails中創建一個新的列數據類型
我期待創造一個軌道新數據類型,例如: t.israeli_id
它得到通過自定義的驗證方法,並根據其添加的錯誤。
我將在幾個表中使用這個數據類型,所以使它成爲一個字符串,並在每個model.rb中傳遞驗證函數將非常乾燥。
我正在使用Postgresql,以防萬一。
不,你正在以一種錯誤的方式接近這個。數據庫對您的應用程序邏輯一無所知,它只能進行基本驗證(不爲空等)。
所有應用程序特定的驗證,錯誤消息和其他東西 - 它會進入您的模型。如果你需要在多個模型中使用它,並且不想複製代碼,那麼請創建一個模型問題,HasIsraeliId
或其他東西。這就是擔心的問題。
# app/models/concerns/has_israeli_id.rb
module HasIsraeliId
extend ActiveSupport::Concern
included do
validate :some_field, whatever_condition: true
end
end
# app/models/user.rb
class User < ApplicationRecord
include HasIsraeliId
end
我可能沒有解釋得很好,我想幾個模型的列將通過特定的驗證方法傳遞,我應該在哪裏將此驗證方法包含在所有models.rb中? –
@ KamalG'ool在這種情況下,您可以創建一個[自定義驗證器](http://guides.rubyonrails.org/active_record_validations.html#custom-validators)並將其分配到模型中。驗證邏輯將不會被複制。 –
以示例的方式發佈它以驗證任何costum驗證方法的名稱,以及如何將其包含在模型中 –
也看這裏:http://stackoverflow.com/questions/2617447/rails-creating-a-custom-data-type-creating-a-shorthand –