2016-12-29 71 views
0

我可能沒有找到正確的單詞以獲得答案,所以你是我的最後一次機會。在rails中創建一個新的列數據類型

我期待創造一個軌道新數據類型,例如: t.israeli_id

它得到通過自定義的驗證方法,並根據其添加的錯誤。

我將在幾個表中使用這個數據類型,所以使它成爲一個字符串,並在每個model.rb中傳遞驗證函數將非常乾燥。

我正在使用Postgresql,以防萬一。

+0

也看這裏:http://stackoverflow.com/questions/2617447/rails-creating-a-custom-data-type-creating-a-shorthand –

回答

1

不,你正在以一種錯誤的方式接近這個。數據庫對您的應用程序邏輯一無所知,它只能進行基本驗證(不爲空等)。

所有應用程序特定的驗證,錯誤消息和其他東西 - 它會進入您的模型。如果你需要在多個模型中使用它,並且不想複製代碼,那麼請創建一個模型問題,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 
+0

我可能沒有解釋得很好,我想幾個模型的列將通過特定的驗證方法傳遞,我應該在哪裏將此驗證方法包含在所有models.rb中? –

+0

@ KamalG'ool在這種情況下,您可以創建一個[自定義驗證器](http://guides.rubyonrails.org/active_record_validations.html#custom-validators)並將其分配到模型中。驗證邏輯將不會被複制。 –

+0

以示例的方式發佈它以驗證任何costum驗證方法的名稱,以及如何將其包含在模型中 –

相關問題