What you are describing are "Data Models" not "Data Types". Data types = String, integer etc. If it is a Active Record Object it's a Data Model or a Active Record Model more specifically.
Eimantas pointed out you are describing a 2 "has_many" relationships but not "have_many" as written in his post. In his example the bookmarkings is called a join model. Remember you can place other things in the join model and use the relationships there to accomplish things. Say you want to have a bookmark order or a favorite rank- the join model is the idea spot for this.
Stripped down example:
class Article < ActiveRecord::Base
has_many :users, :through => :user_bookmarks
end
class UserBookmark < ActiveRecord::Base
belongs_to :user
belongs_to :article
end
class User < ActiveRecord::Base
has_many :user_bookmarks
has_many :articles, :through => :user_bookmarks
end
Things to look at after getting the basics down:
Counter caches - if you are doing counts they are your friend.
It is likely way easier and cleaner to just use these 2 join models rather than try to dive into polymorphism right now. After you get that up and running you could explore that next.