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 #<User:0xb7d815cc 
> @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