Hi,
I have an unusual use-case where I need to override a has_many
accessor to return an array of results depending on some the value of
a class variable. I''ve tried several solutions, the closest to success
using the extension option:
[code]
has_many :meta_associations, :as => :meta_extendable do
# Find any meta_associations that are joined to this
activerecord instance
def meta_associations(*args)
options = args.extract_options!
if proxy_owner.class.applicable_type =proxy_owner.class.name
options[:conditions] ||= { :meta_extendable_id =>
proxy_owner.id,
:meta_extendable_type =>
proxy_owner.class.applicable_type }
else
options[:conditions] ||= { :meta_extendable_id =>
proxy_owner.send
(proxy_owner.class.applicable_type_foreign_key.to_sym),
:meta_extendable_type =>
proxy_owner.class.applicable_type }
end
MetaAssociation.find(args.first, options)
end
end
[/code]
However, this just gives me an
instance.meta_associations.meta_associations method, rather than
overriding the default instance.meta_associations. Is this possible,
or should I forget using :has_many and manually write all the
collection accessors/mutators?
Thanks,
Chris
--
www.chrisblunt.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On 17 Apr 2009, at 11:27, Chris wrote:> > > However, this just gives me an > instance.meta_associations.meta_associations method, rather than > overriding the default instance.meta_associations. Is this possible, > or should I forget using :has_many and manually write all the > collection accessors/mutators? >Well you cannot overwrite the instance.meta_associations method like that (since you''re adding method to the associations proxy, but foo.meta_associations just returns that proxy). You may get some mileage out of overwriting the methods that actually load the association (find_target, the method that generates the scope used for other operations etc) Fred> Thanks, > Chris > -- > www.chrisblunt.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hi Fred, Thanks for your reply. I tried overriding the methods directly, but they seem to be ignored by AR and the association proxy takes precedence over my implementation. However, I''ve looked over my code and am going to try a different approach than trying to override the original accessors for now; I''ll post back how I get on. Thanks, Chris On Apr 17, 1:23 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On 17 Apr 2009, at 11:27, Chris wrote: > > > However, this just gives me an > > instance.meta_associations.meta_associations method, rather than > > overriding the default instance.meta_associations. Is this possible, > > or should I forget using :has_many and manually write all the > > collection accessors/mutators? > > Well you cannot overwrite the instance.meta_associations method like > that (since you''re adding method to the associations proxy, but > foo.meta_associations just returns that proxy). > > You may get some mileage out of overwriting the methods that actually > load the association (find_target, the method that generates the scope > used for other operations etc) > > Fred > > > Thanks, > > Chris > > -- > >www.chrisblunt.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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---