Ruby on Rails Wednesday, January 16, 2013

On Jan 16, 2013, at 4:09 PM, Walter Lee Davis wrote:

> I have an Image class with
>
> belongs_to :attachable, :polymorphic => true
>
> Titles can have Images, and so can People. In the Person class, I have the apposite relationship:
>
> has_many :images, :as => :attachable, :dependent => :destroy
> accepts_nested_attributes_for :images, :reject_if => lambda { |a| a[:file].blank? && a[:file_uid].blank? && a[:file_url].blank? && a[:name].blank? }, :allow_destroy => true
>
> This all works fine, I've got my forms working perfectly. Now I would like to mark one image as being the "portrait" for this person, and I'm stuck on how best to do this. I have done it in the past in what I recognize was a very hacky manner, just adding an image_id to the parent class and setting that in my controller. I'd rather go with the flow.
>
> How would you add this to the models so that the relationship can be expressed in a normal nested form?
>
> Walter

I made a little dummy app to test this out in console, and got the following to work, but (maybe it's just me) the naming seems wrong:

class Person < ActiveRecord::Base
attr_accessible :photo, :name
has_many :photos, :as => :attachment, :dependent => :destroy
belongs_to :photo
end

class Photo < ActiveRecord::Base
attr_accessible :file_name, :name
belongs_to :attachment, :polymorphic => true
has_one :person
end

Ignore the fact that I called it Photo rather than Image in this one...

Photo has_one person, but there are going to be instances where the attachment is to a Title (which doesn't need that relationship), and I'm not sure what happens then.

Walter

>
> --
> 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@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

--
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@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments:

Post a Comment