2015-05-08 52 views
3

我想寫我的第一個寶石,它有信用卡領域的驗證。我創建了一個模塊MyCcValidation及以下作品:寶石:包括我自己的模塊到ActiveModel ::驗證

class User < ActiveRecord::Base 
    include MyCcValidation 
    my_validation_helper { some_data } 
end 

我希望達到的目標是能夠到創業板添加到我的Gemfile並有my_validation_helper提供「開箱即用」。我嘗試了很多方法來延伸ActiveModel::Validations,但目前爲止沒有運氣。這是我的第一個寶石,所以我可能會錯過一些東西,例如devise似乎沒有問題。這應該如何完成?

+0

你寧願將它包含在ActiveRecord :: Base中 – apneadiving

+0

如果是這樣,那將如何完成? –

+0

嘗試:'ActiveRecord :: Base.send:include,MyCcValidation' – apneadiving

回答

1

擴展ActiveModel::Validations直接聽起來不是一個好主意。嘗試定義一個自定義驗證器類,然後重新打開ActiveModel::Validations::HelperMethods模塊並在其中添加your_validation_helper

例子:

class MyCustomValidator < ActiveModel::Validator 
    def validate(record) 
    # ... 
    end 
end 

module ActiveModel::Validations 
    module HelperMethods 
    def validates_my_custom_stuff(*attr_names) 
     validates_with MyCustomValidator, attr_names 
    end 
    end 
end 

內部,ActiveModel::Validations延伸HelperMethods,讓您的驗證輔助方法,應適用於所有型號。