Articles
例えば https://amakan.net/ では、書籍の重複を防ぐために「蒼き鋼のアルペジオ コミック 1-7巻セット」や「君のナイフ コミック 全10巻完結セット」のような書籍が登録されることを禁止している。これは「巻セット」や「巻完結セット」のような禁止ワードを幾つか用意することで対応しているが、これをActiveModelの既存のValidatorで実現するためには、以下のようにFormatValidatorが利用できる。
class Book < ActiveRecord::Base
INVALID_NAME_PARTS = %w(
Amazon.co.jp限定
コミックセット
ドラマCD
同梱版
巻セット
巻完結セット
特装版
限定版
)
validates :name, format: { without: ::Regexp.union(INVALID_NAME_PARTS) }
end
String#include?
を利用できるようなものがあれば理想的だったが、存在しないようなので (知っていれば教えてください)、代わりに正規表現を渡せるFormatValidatorを利用した。

Commented on 2016-07-05
ExlusionValidator
というのがあって、
https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/activemodel/lib/active_model/validations/exclusion.rb
validates :name, exclusion: { in: INVALID_NAME_PARTS }
のように使えると思います!
http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates


Commented on 2016-07-05
自分も最初ExclusionValodatorを考えて諦めた口です。ただ、もしExclusionValidatorの各要素との一致判定のロジックが === て実装されていれば、正規表現の配列を渡して実現できますね
