My app has an association that''s got me scratching my head.
I have Users, and Images. A User has many Images. (Yes, another
picture sharing app, but it''s for a small niche, and it
doesn''t end
in -r!)
I would like to express a "Favorite" relationship between both Users
to Users, and Users to Images. This seems like the opposite of the
standard polymorphic model, i.e. tags and taggable, where a Tag may
apply to many different types of Thing.
Perhaps I''m not thinking of it properly, but this was my first stab
at the relationship:
###############################################################
class Image < ActiveRecord::Base
# Can be a favorite
belongs_to :favorite
belongs_to :favorable, :polymorphic => :true
end
class User < ActiveRecord::Base
has_many :images
# Can be a favorite
belongs_to :favorite
belongs_to :favorable, :polymorphic => :true
# Has many favorite ''things''
has_many :favorites, :dependent => :destroy
has_many :favorite_images, :as => :favorable, :through => :favorites,
:classname => "Image"
has_many :favorite_users, :as => :favorable, :through => :favorites,
:classname => "User"
end
class Favorite < ActiveRecord::Base
belongs_to :favorable, :polymorphic => true
end
create_table "favorites" do |t|
t.column :user_id, :integer
t.column :favorable_id, :integer
t.column :favorable_type, :string
end
create_table "images" do |t|
t.column :name, :string
end
create_table "users" do |t|
t.column :name, :string
end
###############################################################
This is of course wrong and does not work :) But I don''t know
whether I''m thinking of the problem incorrectly, or whether
there''s
even a proper way to do this sort of reverse-polymorphic-join in
ActiveRecord.
Does anyone have any advice?
-Seth
The main page on polymorphic associations on the wiki actually is a reverse relationship (folder has many textfiles, images, etc, from memory). I found it very helpful: http://wiki.rubyonrails.com/rails/pages/HowToUsePolymorphicAssociations Seth Morabito wrote:> My app has an association that''s got me scratching my head. > > I have Users, and Images. A User has many Images. (Yes, another > picture sharing app, but it''s for a small niche, and it doesn''t end in > -r!) > > I would like to express a "Favorite" relationship between both Users > to Users, and Users to Images. This seems like the opposite of the > standard polymorphic model, i.e. tags and taggable, where a Tag may > apply to many different types of Thing. > > Perhaps I''m not thinking of it properly, but this was my first stab at > the relationship: > > ############################################################### > class Image < ActiveRecord::Base > # Can be a favorite > belongs_to :favorite > belongs_to :favorable, :polymorphic => :true > end > > class User < ActiveRecord::Base > has_many :images > # Can be a favorite > belongs_to :favorite > belongs_to :favorable, :polymorphic => :true > # Has many favorite ''things'' > has_many :favorites, :dependent => :destroy > has_many :favorite_images, :as => :favorable, :through => :favorites, > :classname => "Image" > has_many :favorite_users, :as => :favorable, :through => :favorites, > :classname => "User" > end > > class Favorite < ActiveRecord::Base > belongs_to :favorable, :polymorphic => true > end > > create_table "favorites" do |t| > t.column :user_id, :integer > t.column :favorable_id, :integer > t.column :favorable_type, :string > end > > create_table "images" do |t| > t.column :name, :string > end > > create_table "users" do |t| > t.column :name, :string > end > ############################################################### > > This is of course wrong and does not work :) But I don''t know whether > I''m thinking of the problem incorrectly, or whether there''s even a > proper way to do this sort of reverse-polymorphic-join in ActiveRecord. > > Does anyone have any advice? > > -Seth > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
Seth Morabito wrote:> My app has an association that''s got me scratching my head. > > I have Users, and Images. A User has many Images. (Yes, another > picture sharing app, but it''s for a small niche, and it doesn''t end > in -r!) > > I would like to express a "Favorite" relationship between both Users > to Users, and Users to Images. This seems like the opposite of the > standard polymorphic model, i.e. tags and taggable, where a Tag may > apply to many different types of Thing.Have to say I''d be tempted to split the two types of favourite for simplicities sake. Say, Favourites and Contacts (for example). A. -- Posted via http://www.ruby-forum.com/.