Forum: Ruby on Rails Am I wrong or is fields_for not working right in Rails 2.2.2

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
36aef9956c6082f69622dd67e8da376f?d=identicon&s=25 Joshua Abbott (joshnabbott)
on 2008-12-02 23:29
I may be totally wrong about what the fields_for method is supposed to
do, but for some reason I thought using it scoped an object around an
association.

For example, I have a User class and when you're creating a new user I
want to use fields_for to add a BillingAddress to the user like so:

<%- fields_for :billing_address do |billing_address_form| -%>
  <%= render :partial => 'billing_addresses/form', :locals => { :f =>
billing_address_form } %>
<%- end -%>


This however, is not scoping the user object around the billing address
form fields because when I view source, I see this:

<p>
  <label for="billing_address_address_one">Address one</label><br />
  <input id="billing_address_address_one"
name="billing_address[address_one]" size="30" type="text" />
</p>
<p>
  <label for="billing_address_address_two">Address two</label><br />
  <input id="billing_address_address_two"
name="billing_address[address_two]" size="30" type="text" />
</p>

I'm using Rails 2.2.2 and maybe this never worked the way I'm thinking
it should, or I could be doing something wrong...

Any suggestions anyone?

Thanks,
Josh
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-03 22:45
(Received via mailing list)
On Dec 2, 10:29 pm, Joshua Abbott <rails-mailing-l...@andreas-s.net>
wrote:
> <%- end -%>
>   <label for="billing_address_address_two">Address two</label><br />
>   <input id="billing_address_address_two"
> name="billing_address[address_two]" size="30" type="text" />
> </p>
>
Assuming that partial is along the lines of
<%= f.label :address_one %>
<%= f.text_field :address_one %>
...

That's what I would expect. Are you expecting it to magically guess
something ?(if so, what?)

Fred
36aef9956c6082f69622dd67e8da376f?d=identicon&s=25 Joshua Abbott (joshnabbott)
on 2008-12-03 22:50
I guess I'm expecting it to know from

<%- form_for(@user) do  |f| -%>

  <%- fields_for :billing_address do |billing_address_form| -%>
    <%= render :partial => 'billing_addresses/form', :locals => { :f =>
billing_address_form } %>
  <%- end -%>

<%- end -%>

to build inputs more like user[billing_address][address_two]

Is that not what fields_for is used for?

-- Josh


Frederick Cheung wrote:
> On Dec 2, 10:29�pm, Joshua Abbott <rails-mailing-l...@andreas-s.net>
> wrote:
>> <%- end -%>
>> � <label for="billing_address_address_two">Address two</label><br />
>> � <input id="billing_address_address_two"
>> name="billing_address[address_two]" size="30" type="text" />
>> </p>
>>
> Assuming that partial is along the lines of
> <%= f.label :address_one %>
> <%= f.text_field :address_one %>
> ...
>
> That's what I would expect. Are you expecting it to magically guess
> something ?(if so, what?)
>
> Fred
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-03 23:04
(Received via mailing list)
On Dec 3, 9:50 pm, Joshua Abbott <rails-mailing-l...@andreas-s.net>
wrote:
>
> to build inputs more like user[billing_address][address_two]
>
Just because lexically it's 'inside' the first form isn't enough (or
to put things another way, it's hard for code to know about the code
that's calling them). If you want what you describe you need to be
explicit: use f.fields_for

Fred
36aef9956c6082f69622dd67e8da376f?d=identicon&s=25 Joshua Abbott (joshnabbott)
on 2008-12-03 23:05
Fred, I think you nailed it! Thanks a lot!

-- Josh

Frederick Cheung wrote:
> On Dec 3, 9:50�pm, Joshua Abbott <rails-mailing-l...@andreas-s.net>
> wrote:
>>
>> to build inputs more like user[billing_address][address_two]
>>
> Just because lexically it's 'inside' the first form isn't enough (or
> to put things another way, it's hard for code to know about the code
> that's calling them). If you want what you describe you need to be
> explicit: use f.fields_for
>
> Fred
This topic is locked and can not be replied to.