2

URLValidatorURL を検証するために名前を付けたカスタム Rails バリデーターを作成しました。これはRail のキャメル ケースの頭字語の命名規則に沿っているようです。

私のモデルでは、次のように URL を検証しています。

validates :url, :presence => true, :url => true

テストを実行すると、次のエラーが表示されます。

`rescue in block in validates': Unknown validator: 'UrlValidator' (ArgumentError)

Rails で正しい規則を使用したり、:url に使用したいカスタム バリデータの名前を指定したりする方法はありますか?

4

1 に答える 1

4

バリデータに名前を付ける必要がありますUrlValidator( camelized の結果'url'):

# Validator for the `url` attribute
class UrlValidator< ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    # to be implemented
  end
end

def Foo < ActiveRecord::Base 
   validates :url, :presence => true
end

ドキュメントへのリンク

または、 name に固執するにはURLValidator、次を使用できますvalidates_with

class URLValidator< ActiveModel::EachValidator
  def validate(record)
    # check on record.url, to be implemented
  end
end

def Foo < ActiveRecord::Base 
   validates_with URLValidator
end

またはより一般的なバージョン (属性の名前が常にではない場合url)

class URLValidator< ActiveModel::EachValidator
  def validate(record)
    value = record.send(options[:on])
    # check value, to be implemented
  end
end

def Foo < ActiveRecord::Base 
   validates_with URLValidator, :on => :url
end
于 2013-02-16T09:22:52.047 に答える