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.
There is the activerecord-tableless gem. It's a gem to create tableless ActiveRecord models, so it has support for validations, associations, types. It supports Active Record 2.3, 3.0, 3.2
The recommended way to do it in Rails 3.x (using ActiveModel) has no support for associations nor types.
This is an approach I have used in the past:
In app/models/tableless.rb
In app/models/foo.rb
In script/console
I found this link which works BEAUTIFULLY.
http://codetunes.com/2008/07/20/tableless-models-in-rails/
I figure the more answers the better since this is one of the first results in google when searching for "rails 3.1 models without tables"
I've implements the same thing without using ActiveRecord::Base while including the ActiveRecord::Validations
The main goal was to get everything working in formtastic, and below I've included a sample payment that will not get saved anywhere but still has the ability to be validated using the validations we all know and love.
I hope this helps someone as I've spent a few hours trying to figure this out today.
Validations are simply a module within ActiveRecord. Have you tried mixing them into your non-ActiveRecord model?
UPDATE: For Rails 3 this can be done very easy. In Rails 3+ you can use the new
ActiveModel
module and its submodules. This should work now:For more info, you can check out the Railscast (or read about it on AsciiCasts) on the topic, as well as this blog post by Yehuda Katz.
OLD ANSWER FOLLOWS:
You may need to add this to the solution, proposed by John Topley in the previous comment:
This provides you with a "fake" table name, if you need one. Without this method,
Foo::table_name
will evaluate to "tablelesses".