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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage