A single column with foreign keys from Multiple tables


          Consider this scenario, I have a table which stores the
"likes" and it would stores the likes from all sorts of tables like
blogs,comments, postings, reviews, etc. So the table has the following
columns(id, like_id and type) where like_id is the id from any of the
previous mentioned tables and type would be single char column to
identify the foreign key table(B for blog, C for comments and so on).
How am i supposed to create the relation between like table and the
other tables?

Have a look at any of the polymorphic tagging libraries out there for an architectural model. The last time I did this, I used mbleigh-acts-as-taggable-on (Rails 2.3). But there were lots of other examples out there in that vein.


Check out the :polymorphic option to belongs_to - it does exactly what
you're describing, except for the (premature) "optimization" of
storing a single character for the type.

--Matt Jones

Awesome guys.. Thanx a lot.. :polymorphic does exactly what I

I'm a newbie in rails but I'm starting to love it..

i do it for rails 3 but i think that will work for you too

in the migration...

create_table :likes do |t|

t.references :likeable, polimorphyc => true #with that, rails build
likeable_id for the id of the others tables, and likeable_type for
identify the table

in like model

belongs_to :likeable, :polymorphic => true


in the other tables

has_one :like, :as =>:likeable


has_many :like, :as =>:likeable

take a look