私のモデルでは、いくつかの検証が繰り返されています。
validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
それをミックスインに入れるにはどうすればよいですか? 'emをミックスインに入れるだけでこのエラーが発生します
app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError)
module Validations
extend ActiveSupport::Concern
included do
validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
end
end
validates
マクロは、モジュールではなく、インクルーダーのコンテキストで評価する必要があります(おそらく行っていたように)。
モジュールは次のようになります。
module CommonValidations
extend ActiveSupport::Concern
included do
validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
end
end
次に、モデルで:
class Post < ActiveRecord::Base
include CommonValidations
...
end
ここでは、コードを少し明確にするために ActiveSupport :: Concern を使用しています。