From: dblack@... Date: 2006-10-15T01:30:36+09:00 Subject: Re: Active Record Inheritence Hi -- On Sun, 15 Oct 2006, Andrew Libby wrote: > > Greetings, > > I'm having some troubles getting single table inheritance working. I'm > outside of rails, and I _think_ I understand the way this whole thing is > supposed to work. I've got tables in a PostgreSQL database, (principal and > user, the User class extends Principal). > > When I run the following code I get an error like so: > > /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1789:in > `method_missing': undefined method `first_name=' for # @attributes={"type"=>"User"}, @new_record=true> (NoMethodError) > > When I change the class definition of User to extend ActiveRecord::Base the > code works and I wind up with rows in the users table. > > Any ideas what I'm not doing correctly? > > > The code: > > #!/usr/bin/ruby > > > #CREATE TABLE principals ( > # id integer DEFAULT nextval('id_seq'::text) NOT NULL, > # "type" text > #); > # > # > #CREATE TABLE users ( > # id integer DEFAULT nextval('id_seq'::text) NOT NULL, > # username text, > # "password" text, > # first_name text, > # last_name text > #); > > require 'rubygems' > require 'active_record' > > ActiveRecord::Base.establish_connection( > :adapter => "postgresql", > :host => "localhost", > :username => "org", > :password => "xx", > :database => "org" > ) > > class Principal < ActiveRecord::Base > > end > > class User < Principal > > end > > u = User.new > u.first_name = 'joejoe' If you want to do single table inheritance, you need to use a single table :-) You're using two (principals and users). Try the following: 1. add a type/text column to users 2. get rid of principals 3. in the models, do: class User < ActiveRecord::Base end class Principal < User end I know I've reversed the inheritance flow; it seems to make more sense this way, but you can of course switch it around. David -- David A. Black | dblack@wobblini.net Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3] DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4] [1] http://www.manning.com/black | [3] http://www.rubypowerandlight.com [2] http://dablog.rubypal.com | [4] http://www.rubycentral.org