ActiveRecordBase Without Table

1 октября 2008, Среда

Бываю случаи, когда необходимо создать модель ActiveRecord но без таблицы в БД. Например, чтобы воспользоваться валидаторами Rails.
Для этого есть замечательный плагин ActiveRecordBaseWithoutTable.
Ставим:

    ruby script/plugin install http://svn.viney.net.nz/things/branches/active_record_base_without_table

Используем в модели:

  class Contact < ActiveRecord::BaseWithoutTable
    column :name, :string
    column :email_address, :string
    column :message, :text
    validates_presence_of :name, :email_address, :string
   end

И все.

Но будьте осторожны некоторые валидаторы лезут в БД чтобы проверить это все. Для таких нужно будет перегружать методы ActiveRecord.

В целом код плагина очень простой. И его можно улучшать на предмет дополнительных возможностей.

Вот и весь плагин.

module ActiveRecord
  class BaseWithoutTable < Base
    self.abstract_class = true

    class << self
      def columns()
        @columns ||= []
      end

      def column(name, sql_type = nil, default = nil, null = true)
        columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
        reset_column_information
      end

      # Do not reset @columns
      def reset_column_information
		generated_methods.each { |name| undef_method(name) }
 		@column_names = @columns_hash = @content_columns = @dynamic_methods_hash = @read_methods = nil
      end
    end
  end
end

Еще будет.

Блог работает на WordPress.
Подписка RSS: все записи, комментарии.