Trying to peek into a WordPress database

I'm trying to use Rails to peek into some WordPress (weblog) database,
using ActiveRecord. Retrieving posts works elegantly, even without one
single line of code. Unfortunately, I can't retrieve associated data
correctly, for example getting the categories of a post.

The relevant WordPress tables and fields are:

Table: wp_posts
  id
  ...

Table: wp_categories
  cat_id
  cat_name
  ...

Table: wp_post2cat
  rel_id
  post_id
  category_id

wp_post2cat is a join table, linking posts to categories.

In my Rails app, I've set up the following models:

File: app/models/post.rb
  class Post < ActiveRecord::Base
    has_and_belongs_to_many :categories, :join_table => "wp_post2cat"
  end

File: app/models/category.rb
  class Category < ActiveRecord::Base
    set_primary_key "cat_id"
    has_and_belongs_to_many :posts, :join_table => "wp_post2cat"
  end

With this, a correct database.yml and the correct table prefix "wp_", I
can correctly retrieve posts or categories:
  p = Post.find(4812)
  c = Category.find(10)

For now, trust me that post 4812 is associated to category 10.
p.methods() shows that this object also has a method categories(), and
c.methods() shows a posts() method.

The problem is that is isn't working:
  p.categories()
results in
  []

If I look to the resulting SQL-query, I see:
  SELECT * FROM wp_categories
  INNER JOIN wp_post2cat ON wp_categories.cat_id =
wp_post2cat.category_id
  WHERE (wp_post2cat.post_id = NULL )

I assume that the problem is in the WHERE-clause: post_id shouldn't be
tested against NULL. If I replace NULL with 4812, I get the correct
Category record.

Could someone locate the error in my setup, or provide pointers for
further experimentation?

Many thanks, kind regards,

Jochem