Search code examples
activerecordruby-on-rails-2

ActiveRecord::Base Without Table


This came up a bit ago ( rails model attributes without corresponding column in db ) but it looks like the Rails plugin mentioned is not maintained ( http://agilewebdevelopment.com/plugins/activerecord_base_without_table ). Is there no way to do this with ActiveRecord as is?

If not, is there any way to get ActiveRecord validation rules without using ActiveRecord?

ActiveRecord wants the table to exist, of course.


Solution

  • This is an approach I have used in the past:

    In app/models/tableless.rb

    class Tableless < ActiveRecord::Base
      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
    
      # Override the save method to prevent exceptions.
      def save(validate = true)
        validate ? valid? : true
      end
    end
    

    In app/models/foo.rb

    class Foo < Tableless
      column :bar, :string  
      validates_presence_of :bar
    end
    

    In script/console

    Loading development environment (Rails 2.2.2)
    >> foo = Foo.new
    => #<Foo bar: nil>
    >> foo.valid?
    => false
    >> foo.errors
    => #<ActiveRecord::Errors:0x235b270 @errors={"bar"=>["can't be blank"]}, @base=#<Foo bar: nil>>