Re: rendering a partial with an array as its :object

Eugene M. Magdel
Sat, 23 Oct 2010 21:05:06 -0000

Had the same problem! Thanks for reporting!

On Sep 30, 1:28 pm, James MacAulay <jmacau...@gmail.com>
wrote:
> This code does not work the same way as it did in 2.x:
>
> render :partial => "things", :object =>
[''foo'', ''bar'', ''baz'']
>
> In 2.x, the "things" partial would be rendered once with a local
> variable called "things" storing the given array.
>
> In 3.0.0 (and edge), the Action View assumes that you really
> meant :collection => [''foo'', ''bar'',
''baz''], so it iterates through the
> array and renders the partial once with each element. It will do this
> for any object which responds to to_ary.
>
> I really think this is a case of Rails being too clever for its own
> good. The difference in behaviour between the :object and :collection
> options is large enough that this makes for a big break in
> expectations. If someone wants the :collection behaviour, they should
> use :collection.
>
> (FWIW, an easy workaround is to pass the array into :locals, which
> people should probably be doing for arrays 99% of the time anyway, but
> silently assuming they meant :collection is not the way to encourage
> that behaviour.)
>
> The relevant change to the code is more than a year old now (commit
> d0301e1) but I couldn''t find any discussion about the change and
the
> tests don''t seem to assert anything about it either way. If
it''s
> really the behaviour we want, then it should be tested and documented.
> I can make a patch in either case.
>
> -James