2017-04-01 9 views
0

私はアプリで単純に妥当性チェックを行うだけでなく、検証前/検証後に変更することもあります。 I.この検証を変更する場所はどこですか?

class Channel < ActiveRecord::Base 
    validate :validate_restreams 
    ... 
    private 
    def validate_restreams 
    self.left_restreams = self.left_restreams - self.restreams #to be sure there's no intersections 
    end 
end 

よう

class Channel < ActiveRecord::Base 
    validate :validate_url 
    ... 
    private 
    def validate_url 
    url = "rtmp://#{url}" if server_url[0..6] != "rtmp://" #alter cause need this prefix 
    unless /rtmp:\/\/[a-z0-9]{1,3}\.pscp\.tv:80\/[a-z0-9]\/[a-z0-9]{1,3}\//.match url 
     errors.add(:url, "...") 
    end 
    end 
end 

やなめらかしかし、私は、それはそのようなことのために適切な場所ではありません感じるので、私は右のそれを行うための方法だかを知る必要がありますか?

答えて

0

レールモデル用のカスタムバリデータを作成できます。クラスを作成してActiveModel::Validatorから継承し、そこにvalidate(record)メソッドを定義すると、エラーがレコードに追加されます。たとえば、次のように

これは、あなたのバリデータクラスです:

class MyValidator < ActiveModel::Validator 
    def validate(record) 
    unless url_valid?(record[:url]) 
     record.errors.add(:url, 'is invalid') 
    end 
    end 

    private 

    def url_valid?(url) 
    # validate url and return bool 
    end 
end 

そして今、単にモデルにこれを追加します。

validates_with MyValidator 
+0

ああ、それは私が取得することが予想答えはありません。私は値を変更することは、あなたが通常バリデータから期待するものではない、という意味ですか?だから、同じことをする別の方法がありますか? – Ngoral

関連する問題