I've been trying to make a simple many-to-many associations. To get along with datamapper i copied the example from dm's homepage. Here we have few simple models for a blog. <code>require 'rubygems' require 'dm-core' require 'dm-validations' require 'dm-timestamps' DataMapper::Logger.new(STDERR, :debug) DataMapper.setup(:default, 'mysql://root@localhost/somedatabase') class Post include DataMapper::Resource # ...or the Serial custom-type which is functionally identical to the above: property :id, Serial, :key => true # ...or pass a :key option for a user-set key like the name of a user: property :name, String property :title, String property :body, Text property :created_at, DateTime end class Comment include DataMapper::Resource property :id, Serial property :posted_by, String property :email, String property :url, String property :body, Text end class Category include DataMapper::Resource property :id, Serial, :key => true property :name, String end class Post has n, :comments end class Comment belongs_to :post end class Categorization include DataMapper::Resource # property :id, Serial # property :created_at, DateTime belongs_to :category belongs_to :post end # Now we re-open our Post and Categories classes to define associations class Post has n, :categorizations has n, :categories, :through => :categorizations, :mutable => true end class Category has n, :categorizations has n, :posts, :through => :categorizations, :mutable => true end DataMapper.auto_migrate! </code> Then i try to do things with this models somehow: <code> post = Post.create(:title => 'first post', :body => 'first post body') post.save post.comments.build(:body => 'comment') post.save post.categories.build(:name => 'tag') post.save </code> and get ArgumentError exception: The property 'post_id' is not a public property. Exception goes from the line containing "post.categories.build(:name => 'tag')". I tried to dig in the code of datamapper to solve this, but it looks too complicated for me. :( Did anyone had this problem?
on 2009-05-24 19:11