Polymorphic associations with ownership

22 views
Skip to first unread message

Mike Kim

unread,
Feb 3, 2012, 7:26:23 PM2/3/12
to Ruby on Rails: Talk
Hi everyone,

I'm sure the answer is out there and quite simple, but I haven't been
able to find it.

Suppose I have the following classes with polymorphic associations:

class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end

class Camera < ActiveRecord::Base
has_many :comments, :as => :commentable
end

class Computer < ActiveRecord::Base
has_many :comments, :as => :commentable
end

class Book < ActiveRecord::Base
has_many :comments, :as => :commentable
end

How do I also make the Comment class belong_to a User class? Would the
User class be parallel to the Camera, Computer, and Book classes? For
example, would I define the relationship between User and Comment as
such:

class User < ActiveRecord::Base
has_many :comments, :as => :commentable
end

And how would I go about referencing the comments through the User-
>Camera/Computer/Book association? Would it be as such?

@user.computers.comments.empty? # For example

Thanks in advance!

Mike


Mike Kim

unread,
Feb 3, 2012, 7:29:54 PM2/3/12
to Ruby on Rails: Talk
Just in case this wasn't clear, I would like every comment to belong
to a user and only be editable by that user, but be associated with a
product type (Camera, Book, etc.). This is why I doubt the simple
class definition I outlined below would suffice.

Best,

Mike

Tim Shaffer

unread,
Feb 3, 2012, 10:28:18 PM2/3/12
to rubyonra...@googlegroups.com
Sounds like you could just add a "belongs_to :user" to the Comment class.

But since you already have "comments" on the user, you'll need to give the reverse association another name. Perhaps "comments_owned"

So add "has_many :comments_owned, :class_name => Comment" to User.

Mike Kim

unread,
Feb 3, 2012, 11:49:58 PM2/3/12
to Ruby on Rails: Talk
Thanks, Tim

Actually, and I haven't fully tested this out yet, I think it's
simpler than that. Currently, I hvae the following:

class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :commentable, polymorphic => true
...
end

and that seems to be working. I have another issue now that I'll
outline in a subsequent email.

Best,

Mike
Reply all
Reply to author
Forward
0 new messages