Hello
There’s a polymorphic association Person -> Adult. There’s an
AssociationProxy array of Adult, how to convert this proxy of Person
to corresponding AssociationProxy of Adult?
Thanks
Hello
There’s a polymorphic association Person -> Adult. There’s an
AssociationProxy array of Adult, how to convert this proxy of Person
to corresponding AssociationProxy of Adult?
Thanks
Normally you operate (iterate) over one of the proxies since it’s job
really is to give you a collection (array) of model instances.
Can you give a more concrete example of what you’re trying to
accomplish?
Let me give you another example, there’s a model Thing that has
polymorphic association with GoodThing and BadThing. Thing also has
many-to-many association with itself: Thing can have many owners and
many properties among other Things.
class Relation < ActiveRecord::Base
belongs_to :owner, :class_name => ‘Thing’, :foreign_key => :owner_id
belongs_to :property, :class_name => ‘Thing’, :foreign_key
=> :property_id
end
class Thing < ActiveRecord::Base
belongs_to :instance, :polymorphic => true
has_many :relations_to, :class_name => ‘Relation’, :foreign_key
=> :owner_id
has_many :relations_from, :class_name => ‘Relation’, :foreign_key
=> :property_id
has_many :properties, :through => :relations_to
has_many :owners, :through => :relations_from
end
class GoodThing < ActiveRecord::Base
has_one :thing, :as => :instance
end
class BadThing < ActiveRecord::Base
has_one :thing, :as => :instance
end
I want to perform operation like:
new_good = GoodThing.new
some_thing.properties.good_things << new_good
new_bad = BadThings.new
some_thing.owners.bad_things << new_bad
some_thing.owners.find :all, :condition => {…}
or even
some_[good | bad]_thing.[owners | properties] << another_thing
I found out that there is a nice plugin has_finder:
so I can add to Thing
class Thing
has_finder :bad_things, :conditions => { :instance_type =>
‘BadThing’ }
has_finder :good_things, :conditions => { :instance_type =>
‘GoodThing’ }
end
and write something like
some_thing.owners.bad_things << new_thing
The problem is that these AssociationProxies (Thing.bad_things,
Thing.good_things) contain objects of class Thing, not BadThing or
GoodThing and I need to do something like
new_good_thing = GoodThing.new
new_thing = Thing.new
new_thing.instance = new_good_thing
some_thing.owners << new_thing
And I wanna operate directly with an AssociationProxy of BadThing or
GoodThings…
something like that)) i hope you can get what i mean
Thanks
i dont want to create any relationships with Property, but between two
Subproperties, like some Subproperty can own many others and be owned
by many others: :property -> :owner, :subproperty -> :possession
Actually what i want is to connect several models with many-to-many
owner/property relationships, there should be only one model
Relationship that holds all the relations, with following columns:
owner_id
owner_type
property_id
property_type
created_on
etc
and i want to easy access to all owners/properties with specific type
of some object:
an_instance_of_one_model.all_owners_of_this_instance_but_from_another_model
<< new_instance_of_that_another_model
Thanks
Sounds like you might have a much simpler data model if you use a
polymorphic association. This will allow you to have a relationship
to many other properties without regard to what class they are. The
only attribute that you care about is their relationship.
class Property < AR::Base
has_one :property_relationship, :as=>:subproperty
has_many :property_relationships
has_many :good_properties, :through=>:property_relationships,
:conditions=>{:subproperty_type=>GoodProperty.name}
has_many :bad_properties, :through=>:property_relationships,
:conditions=>{:subproperty_type=>BadProperty.name}
has_many :super_properties, :through=>:property_relationships,
:conditions=>{:subproperty_type=>Property.name}
end
class PropertyRelationship < AR::Base
belongs_to :property
belongs_to :subproperty, :polymorphic => true
end
class GoodSubproperty < AR::Base
has_one :property_relationship, :as=>:subproperty
end
class BadSubproperty << AR::Base
has_one :property_relationship, :as=>:subproperty
end
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs