I have 3 tables, news,activities, threads.
threads contains all the replies for news and activities. Therefore
threads has a category_id and postid column to map a reply to a table
and initial thread.
How do i say that news has many threads, but threads has a generic
post_id foreign key field, not a news_id foreign key field as well as
a category_id of 1 (or 2 if its activities)?
thanks
adam
Hi Adam,
I’ll take a guess that you want to do this:
-news
id serial
body_text text
-activities
id serial
body_text text
-replies
id serial
owner_class varchar(255)
owner_id int
body_text text
Class News < ActiveRecord::Base
has_many :replies,
:foreign_key => “owner_id”
:conditions => “owner_class = ‘News’”
:order => ‘id’
end
Class Activities < ActiveRecord::Base
has_many :replies,
:foreign_key => “owner_id”
:conditions => “owner_class = ‘Activities’”
:order => ‘id’
end
Class Replies < ActiveRecord::Base
end
I am doing exactly this for images in store.rb project. If someone has a
better idea I’d like to hear it too!
Peter
why not just use single table inheritance?
posts
id
type (magic column name)
body
replies
id
post_id
body
class Post < ActiveRecord::Base
end
class NewsPost < Post
has_many :replies
end
class Article < Post
has_many :replies
end
class Reply < ActiveRecord::Base
belongs_to :post
end
news_post = NewsPost.create(“foobar”)
news_post.replies << Reply.create(“barfoo”)
post = Post.find(:first) # post == NewsPost object
Could this all be in just one table since posts and replies are so
similar?
I haven’t used single table inheritance before but maybe something like
this
will work?
posts
id
type (magic column name: News, Article, Reply)
body
parent_id
class Post < ActiveRecord::Base
acts_as_tree
end
class News < Post
end
class Article < Post
end
class Reply < Post
end
A new thread (either News or Article) will have parent_id NULL.