Thanks for this, I'll add it to the README and forward this mail along
to the rails list.
Cheers
Martyn
On 09/20/2012 03:34 PM, Jiří Stránský wrote:
I'd prefer the controller approach, since that's where the problem is
IMO and where it should be solved. And it seems to me the controller
way has the lowest amount of evil present.
I'd stay out of touching the addresses= method. I have a panic fear of
changing any magic of ActiveRecord to different magic. I'm a bit
afraid this would come bite us in the buttocks later.
Custom XML parser is probably safer, but it still somehow doesn't seem
right to me that:
'<addresses>...' --> parse_xml_into_hash --> { 'addresses_attributes'
=> ...}
I think this is not the layer where the problem should be solved.
IMO the very essence of the problem is that we get params which
ActiveRecord doesn't understand out of the box. Controllers are the
right place to transform params so that our models understand them.
(At least this is how the whole situation appears to me.)
With a little luck, this could be solved with a single before_filter
that would alter params directly (evil, but controller actions stay
untouched) or create something like transformed_params to be used
instead of original params (not evil, but we have to use a different
variable in controllers). I believe this can be solved in a reasonably
generic way, so for each controller you'll have just something like:
before_filter { transform_associations_from_xml('user' =>
['addresses']) }
and to illustrate a more complicated case:
before_filter { transform_associations_from_xml('user_group' =>
{'users' => ['addresses', 'phones']}) }
Or maybe the keys that have to be changed could be autodetected from
how the Hash is structured, so it might even become:
before_filter :transform_associations_from_xml
Not sure if the last one ^^ is a good idea, we'd have to give it more
thought.
So how about that?
Btw Martyn you described the problem very clearly and the sample app
will enable us to hack on some solutions. Way to go for similar stuff ;)
J.
On 20.9.2012 14:20, Martyn Taylor wrote:
Gents.
I'm having some trouble with getting nested resources working
properly from bespoke XML/JSON in RESTful API. There seems to be
some fundamental problems with the way rails works, which means we
have to write a lot of bespoke code to get it working, possibly even
having to monkey patch Rails itself.
I've written an example rails app that highlights the problem and put
a detailed description in the README you can find it here:
https://github.com/mtaylor/Rails-Nested-Resource-Issues
I've ran into this issue on IME. But it's going to affect us across
all rails projects with REST APIs, so we could do with discussing
this issue and coming up with the best possible solution that results
in as little replication as possible.
Please read through the problem and let me know if you have any
better ideas that the solutions I have proposed.
Regards
Martyn