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

James MacAulay
Thu, 30 Sep 2010 18:43:50 -0000

Made a ticket:

https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/5746-rendering-a-partial-with-an-array-as-its-object-behaves-as-if-it-were-collection

-James

On Sep 30, 2:30 pm, Prem Sichanugrist <sikand...@gmail.com>
wrote:
> This is interesting. I don''t think Rails should acts that way. It
should only iterate through the collection only if :collection => is
provided.
>
> Can you open the lighthouse ticket for this one?
>
> Thanks,
>
> Prem
>
> On 1 ต.ค. 2553, at 1:28, James MacAulay 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
>
> > --
> > You received this message because you are subscribed to the Google
Groups "Ruby on Rails: Core" group.
> > To post to this group, send email to
rubyonrails-core@googlegroups.com.
> > To unsubscribe from this group, send email to
rubyonrails-core+unsubscribe@googlegroups.com.
> > For more options, visit this group
athttp://groups.google.com/group/rubyonrails-core?hl=en.