R
rwz
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.setupdefault, '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 osted_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 ost
end
class Categorization
include DataMapper::Resource
# property :id, Serial
# property :created_at, DateTime
belongs_to :category
belongs_to ost
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, osts, :through => :categorizations, :mutable => true
end
DataMapper.auto_migrate!
</code>
Then i try to do things with this models somehow:
<code>
post = Post.createtitle => 'first post', :body => 'first post body')
post.save
post.comments.buildbody => 'comment')
post.save
post.categories.buildname => '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.buildname
=> '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?
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.setupdefault, '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 osted_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 ost
end
class Categorization
include DataMapper::Resource
# property :id, Serial
# property :created_at, DateTime
belongs_to :category
belongs_to ost
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, osts, :through => :categorizations, :mutable => true
end
DataMapper.auto_migrate!
</code>
Then i try to do things with this models somehow:
<code>
post = Post.createtitle => 'first post', :body => 'first post body')
post.save
post.comments.buildbody => 'comment')
post.save
post.categories.buildname => '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.buildname
=> '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?