Rails 2.3.11 Создание модели для формы и использование проверки ActiveRecord - PullRequest
3 голосов
/ 14 июня 2011

В Rails 3 вы просто включаете модули ActiveRecord, чтобы добавить валидации к любой модели без поддержки базы данных.Я хочу создать модель для формы (например, модель ContactForm) и включить оценки ActiveRecord.Но вы не можете просто включить модули ActiveRecord в Rails 2.3.11.Есть ли способ выполнить то же поведение, что и в Rails 3 в Rails 2.3.11?

1 Ответ

2 голосов
/ 19 июля 2011

Если вы просто хотите использовать виртуальный класс в качестве своего рода прокси-сервера проверки для более чем одной модели, может помочь следующее (для 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! недоступны, если вы попытаетесь включить его до определения их. Возможно, не лучшее решение, но оно работает.

...