Modelo sin tablas con asociaciones ActiveRecord en Rails 3.2
La configuración de mi aplicación incluye algunos valores que deben usarse en las relaciones AR. Soy consciente de que es un intento extraño y potencialmente delictivo, pero necesito mantener la configuración como un archivo de texto, y honestamente creo que tengo un buen caso para un modelo sin tablas. Desafortunadamente, estoy teniendo problemas para convencer a AR (Rails 3.2) de que no busque la mesa. Mi modelo sin tablas:
class Tableless < ActiveRecord::Base
def self.table_name
self.name.tableize
end
def self.columns
@columns ||= [];
end
def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
end
def self.columns_hash
@columns_hash ||= Hash[columns.map { |column| [column.name, column] }]
end
def self.column_names
@column_names ||= columns.map { |column| column.name }
end
def self.column_defaults
@column_defaults ||= columns.map { |column| [column.name, nil] }.inject({}) { |m, e| m[e[0]] = e[1]; m }
end
def self.descends_from_active_record?
return true
end
def persisted?
return false
end
def save( opts = {} )
options = { :validate => true }.merge(opts)
options[:validate] ? valid? : true
end
end
Esto se extiende por el modelo real:
class Stuff < Tableless
has_many :stuff_things
has_many :things, :through => :stuff_things
column :id, :integer
column :name, :string
column :value, :string
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
end
Todo esto está basado en el código encontradoaquí en SO yen otra parte, pero ay, me saleSQLException: no hay tal tabla: cosas: ¿Alguna pista alguna?