Polymorphic associations with ownership

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

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

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.

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