Подтвердить что ты не робот

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)
4b9b3361

Ответ 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 здесь, чтобы сделать код немного понятным.