Rails Nested Resource Issues

Jiří Stránský jstransk at redhat.com
Thu Sep 20 14:34:53 UTC 2012


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




More information about the aeolus-devel mailing list