Если вы просто хотите использовать виртуальный класс в качестве своего рода прокси-сервера проверки для более чем одной модели, может помочь следующее (для 2.3.x, 3.x.x позволяет пользователю использовать ActiveModel, как указано выше):
class Registration
attr_accessor :profile, :other_ar_model, :unencrypted_pass, :unencrypted_pass_confirmation, :new_email
attr_accessor :errors
def initialize(*args)
# Create an Errors object, which is required by validations and to use some view methods.
@errors = ActiveRecord::Errors.new(self)
end
def save
profile.save
other_ar_model.save
end
def save!
profile.save!
other_ar_model.save!
end
def new_record?
false
end
def update_attribute
end
include ActiveRecord::Validations
validates_format_of :new_email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
validates_presence_of :unencrypted_pass
validates_confirmation_of :unencrypted_pass
end
таким образом вы можете включить подмодуль Validations, который будет жаловаться на то, что методы save
и save!
недоступны, если вы попытаетесь включить его до определения их. Возможно, не лучшее решение, но оно работает.