Rails поставить проверку в модуле mixin?

Некоторые проверки повторяются в моих моделях:

validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true

Как бы я положил это в миксин? Я получаю эту ошибку, если просто помещаю их в миксин

app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError)

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

 24 сент. 2013 г., 10:33
 08 нояб. 2012 г., 14:54
Можно ли проверить это в Rails 2? Например, в Rails 3 вы можете использовать ActiveModel для создания класса Test; конец и включить то, что нам нужно. а затем напишите спецификации для этого модуля. Но как насчет версии Rails 2 это возможно?
Решение Вопроса
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 макрос должен оцениваться в контексте включающего, а не модуля (как вы, вероятно, делали).

 24 сент. 2013 г., 10:32
Есть ли способ сделать это в рельсах 2
 08 мая 2013 г., 01:24
@KyleDaigle Да, ты прав. Я обновил оригинальный пост.
 13 февр. 2017 г., 10:49
Просто в стороне, я бы назвал этоSeoValidatable и держать его в этом домене.
 22 окт. 2012 г., 17:34
Я считаю, что на самом деле это должно бытьActiveSupport::Concern вместоActiveSupport::Concerns (Не позволил бы мне отредактировать это, потому что это - редактирование единственного символа.)

Ваш ответ на вопрос