ActiveRecordBase Without Table
Бываю случаи, когда необходимо создать модель 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
Еще будет.
Метки: ActiveRecord, ActiveRecordBaseWithoutTable, plugins, rails
