Greg Ma wrote in post #970946:> Hi,
> I have a polymorphic Image model that I am using on 2 very different
> models.
> I would like to have different image styles depending on the model.
>
> I have been searching everywhere for an answer but I haven''t be
able to
> find something.
I assume you would need to know, for a certain "image", for which of
your 2 models this is used.
I am not familiar with Paperclip, but in general, if you use a
polymorphic asociation, it is easy to find out to which model this
"Image" object is linked to with self.association.class .
I made a little mock-up where an Image class has a polymorphic
belongs_to
association to classes "Person" and "User". What you could
do is decide
based on the class of the result of the association what you are looking
at:
class Image < ActiveRecord::Base
belongs_to :someone, :polymorphic => true
end
rails c
Loading development environment (Rails 3.0.3)
001:0> image_1 = Image.new(:url => "http://flickr...")
=> #<Image id: nil, url: "http://flickr...", someone_type: nil,
someone_id: nil, created_at: nil, updated_at: nil>
002:0> image_1.someone = User.first
=> #<User id: 1, first_name: "Jon", last_name: nil, user_name:
nil,
testing: nil, created_at: "2010-12-23 21:57:01", updated_at:
"2010-12-23
21:57:01">
003:0> image_1.save!
=> true
004:0> image_2 = Image.new(:url => "http://picassa...", :someone
=>
Person.first)
=> #<Image id: nil, url: "http://picassa...", someone_type:
"Person",
someone_id: 1, created_at: nil, updated_at: nil>
005:0> image_2.save!
=> true
006:0> Image.all
=> [#<Image id: 3, url: "http://flickr...", someone_type:
"User",
someone_id: 1, created_at: "2010-12-27 20:45:01", updated_at:
"2010-12-27 20:45:01">, #<Image id: 4, url:
"http://picassa...",
someone_type: "Person", someone_id: 1, created_at: "2010-12-27
20:45:36", updated_at: "2010-12-27 20:45:36">]
007:0> image_1.someone.class
=> User(id: integer, first_name: string, last_name: string, user_name:
string, testing: string, created_at: datetime, updated_at: datetime)
008:0> image_2.someone.class
=> Person(id: integer, first_name: text, last_name: text, birth_date:
date, gsm_number: text, comment: string, created_at: datetime,
updated_at: datetime)
009:0> image_1.someone.class == User
=> true
010:0> image_1.someone.class == Person
=> false
The ''image.someone.class'' will tell you if this image is used
for
a Person or for a User.
At a deeper level, one could also inspect the content of
image.someone_type, but I feel that is not as clean, since this
relies on the internals of a particular implementation of the
polymorphic assocation.
011:0> image_1.someone_type
=> "User"
012:0> image_2.someone_type
=> "Person"
HTH,
Peter
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.