Rails ставит проверку в модуле mixin?
Некоторые проверки повторяются в моих моделях:
validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
Как бы я положил это в mixin? Я получаю эту ошибку, если я просто помещаю их в mixin
app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError)
Ответы
Ответ 1
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
должен оцениваться в контексте вставки, а не модуля (как вы, вероятно, делали).
Ответ 2
Ваш модуль должен выглядеть примерно так:
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 здесь, чтобы сделать код немного понятным.