Join two models

Need some help with understanding the best way of doing the following:

I have a user model and two models (link_post and text_post) i now want to join the models together as post. both link_post and text_post has a user_id column.

What a i want is to get   u = User.first   u.posts   to collect all link_post and text_post together.

Should this be done with a scope or with some model association ? I don't need a controller for posts just the self join. But if i can get other scopes on "posts" it would be great... (like published_on etc ...)

Have a look at the Rails Guide on ActiveRecord Associations. That should get you started.

Colin

Looks like you could use inheritance here, with LinkPost and TextPost inheriting from Post. Then user would 'has_many :posts' and that way when you do:    u.posts You would get both link_posts and text_posts

Also you'll probably want to call the previous as:   User.includes(:posts).all

This way you 'preload' posts and save yourself from making an extra sql request each time you hit a user in an iteration ( for more info. google: n+1 query)

Thanks, got it sort of working. Would like to drop < ActiveRecord::Base from Post (don't want to create a table for Posts) just the TextPost and LinkPost, will work on that tonight. Thanks again.

/Niklas.