Failry simple(?) active record question

I'm plodding my way through active record right now, and running into
some things that seem odd.

Take a really simple example
#!/usr/bin/ruby
require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
:database => "foo.db")

ActiveRecord::Schema.define() do
  create_table :containers do |table|
    table.column :name, :string
  end
  create_table :things do |table|
    table.column :description, :string
  end
end

class Container<ActiveRecord::Base
  has_many :things
end

class Thing<ActiveRecord::Base
  belongs_to :container
end

Container.create(:name=>"Bucket")
bucket=Container.find_by_name("Bucket")
pocket=Container.create(:name=>"Pocket")

bucket.save
pocket.save

Container.find(:all)
#this will find both containers

Thing.find(:all)
#empty, as expected

bucket.things.create(:description=>"fish")
pocket.things.create(:description=>"lint")

Thing.find(:all)
#looks good...

#but howcome
pocket.things.find(:all)
#throws some huge error instead of finding the things in the pocket?

Sorry for the overly newbie type question :slight_smile: I just really thought
ActiveRecord was supposed to take care of all this stuff.

Thanks,
           Kyle

What error do you get? That would help in diagnosing the problem.

You might also want to ask the Ruby on Rails list. I know ActiveRecord
doesn't have to be used with Rails, but they probably have more people
there with ActiveRecord experience.

Jeremy

···

On Nov 26, 9:32 pm, Kyle Schmitt <kyleaschm...@gmail.com> wrote:

I'm plodding my way through active record right now, and running into
some things that seem odd.

Take a really simple example
#!/usr/bin/ruby
require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
:database => "foo.db")

ActiveRecord::Schema.define() do
  create_table :containers do |table|
    table.column :name, :string
  end
  create_table :things do |table|
    table.column :description, :string
  end
end

class Container<ActiveRecord::Base
  has_many :things
end

class Thing<ActiveRecord::Base
  belongs_to :container
end

Container.create(:name=>"Bucket")
bucket=Container.find_by_name("Bucket")
pocket=Container.create(:name=>"Pocket")

bucket.save
pocket.save

Container.find(:all)
#this will find both containers

Thing.find(:all)
#empty, as expected

bucket.things.create(:description=>"fish")
pocket.things.create(:description=>"lint")

Thing.find(:all)
#looks good...

#but howcome
pocket.things.find(:all)
#throws some huge error instead of finding the things in the pocket?

Sorry for the overly newbie type question :slight_smile: I just really thought
ActiveRecord was supposed to take care of all this stuff.

Thanks,
           Kyle

AR questions should go to the rails list... that's the group that writes and supports AR.

···

On Nov 26, 2007, at 19:32 , Kyle Schmitt wrote:

I'm plodding my way through active record right now, and running into
some things that seem odd.

Kyle Schmitt wrote:

Take a really simple example

ActiveRecord::Schema.define() do
  create_table :containers do |table|
    table.column :name, :string
  end
  create_table :things do |table|
    table.column :description, :string
  end
end
..
#but howcome
pocket.things.find(:all)
#throws some huge error instead of finding the things in the pocket?

Kyle,

   when you have a relationship 'belongs_to', you need to define a field
in the database table to references the parent (the name is
<parent_singular>_id), as ActiveRecord does not create this field
automatically. So, we just need a 'container_id' in the 'things' table:

ActiveRecord::Schema.define() do
  create_table :containers do |table|
    table.column :name, :string
  end

  create_table :things do |table|
    table.column :description, :string
    table.column :container_id, :integer # <-- here
  end
end

Your example runs now fine.
You could also add an index (with 'add_index') for performance.

Regards

Raul

···

--
Posted via http://www.ruby-forum.com/\.

OK. I'll repost it there. As I really wanna just use AR and not
rails :wink: I had hopes for this list.

Heck maybe this just means if I'm having this much trouble I should
write all my findings up as a few good examples and howto's.

Thanks
          --Kyle