Hello, I''m trying to find a very abstract and "one size fits all" for converting nested active record results to nested hashes. It''s easy, to do one level deep as such: [code] results_to_hash = Hash[ found_categories.map{ |c| [c.id, c.title]}] [/code] But, when I try to add another collection to the mix, it completely borks and the results_to_hash only returns an empty hash IE: [code] results_to_hash = Hash[ found_categories.map{ |c| [c.id, c.title, c.categories]}] [/code] Ultimately, I''d like it to be smart enough to detect if a model object contains a collection (IE: object.class.reflect_on_all_associations), and automatically convert those to hashes. Any ideas? Thanks, Eric -- 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 unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/ec66d71cd04c4b8a9a30f0681beef329%40ruby-forum.com?hl=en-US. For more options, visit https://groups.google.com/groups/opt_out.
Would this work? MyModel.last.serializable_hash methods: MyModel.reflections.keys Or is that too much? Look at the options that you can pass into serializable_hash. However, if you are doing this for json/etc. serialization in the controller, check out ActiveModel::Serializers. On Wednesday, May 22, 2013 10:53:14 AM UTC-4, Ruby-Forum.com User wrote:> > Hello, > I''m trying to find a very abstract and "one size fits all" for > converting nested active record results to nested hashes. It''s easy, > to do one level deep as such: > > [code] > results_to_hash = Hash[ found_categories.map{ |c| [c.id, c.title]}] > [/code] > > But, when I try to add another collection to the mix, it completely > borks and the results_to_hash only returns an empty hash IE: > > [code] > results_to_hash = Hash[ found_categories.map{ |c| [c.id, c.title, > c.categories]}] > [/code] > > Ultimately, I''d like it to be smart enough to detect if a model object > contains a collection (IE: object.class.reflect_on_all_associations), > and automatically convert those to hashes. > > > Any ideas? > > Thanks, > Eric > > -- > 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 unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/22afeaa7-be1b-4837-9eae-05ef72c14303%40googlegroups.com?hl=en-US. For more options, visit https://groups.google.com/groups/opt_out.
One note about this: this can hit n+1 queries pretty hard. Unless you put include: in your associations (which I wouldn''t not recommend unless it makes sense, and it probably doesn''t) you have to know at query time what to include (or use joins), and what I just posted would make that difficult. If you do use ActiveModel::Serializers instead and have big serialized objects, look at yodo to help you identify the value for include: in your queries to avoid n+1: https://github.com/garysweaver/yodo You could also look at bullet in that regard: https://github.com/flyerhzm/bullet On Wednesday, May 22, 2013 3:12:43 PM UTC-4, gsw wrote:> > Would this work? > > MyModel.last.serializable_hash methods: MyModel.reflections.keys > > Or is that too much? > > Look at the options that you can pass into serializable_hash. > > However, if you are doing this for json/etc. serialization in the > controller, check out ActiveModel::Serializers. > > > On Wednesday, May 22, 2013 10:53:14 AM UTC-4, Ruby-Forum.com User wrote: >> >> Hello, >> I''m trying to find a very abstract and "one size fits all" for >> converting nested active record results to nested hashes. It''s easy, >> to do one level deep as such: >> >> [code] >> results_to_hash = Hash[ found_categories.map{ |c| [c.id, c.title]}] >> [/code] >> >> But, when I try to add another collection to the mix, it completely >> borks and the results_to_hash only returns an empty hash IE: >> >> [code] >> results_to_hash = Hash[ found_categories.map{ |c| [c.id, c.title, >> c.categories]}] >> [/code] >> >> Ultimately, I''d like it to be smart enough to detect if a model object >> contains a collection (IE: object.class.reflect_on_all_associations), >> and automatically convert those to hashes. >> >> >> Any ideas? >> >> Thanks, >> Eric >> >> -- >> 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 unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/c737b636-0bbb-4239-97e3-98011e8b556a%40googlegroups.com?hl=en-US. For more options, visit https://groups.google.com/groups/opt_out.