Tableless-Modell mit ActiveRecord-Zuordnungen in Rails 3.2
Meine Anwendungskonfiguration enthält einige Werte, die in AR-Beziehungen verwendet werden müssen. Ich bin mir bewusst, dass dies eine seltsame und möglicherweise kriminelle Angelegenheit ist, aber ich muss die Konfiguration als Textdatei beibehalten, und ich denke ehrlich, ich habe ein gutes Argument für ein tablettenloses Modell. Leider habe ich Probleme, AR (Rails 3.2) davon zu überzeugen, nicht nach dem Tisch zu suchen. Mein tableless Modell:
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
Dies wird um das aktuelle Modell erweitert:
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
Dies alles basiert auf dem gefundenen Codehier auf SO undanderswo, aber leider verstehe ichSQLException: keine solche Tabelle: stuffs: Irgendwelche Hinweise?