Add an index to a form

Hello,

I'm having some trouble with forms, my app allows to enter data by
using a multi-step form that has 7 steps.
There are 3 steps that may let the user to add 1 form, for example
there's a step called "children"
and that children has the following fields:
  * name
  * age
  * gender
but one father may have more than 1 child and I'm adding another form
with ajax by following this
http://stackoverflow.com/questions/4812003/adding-fields-dynamically-in-a-nested-model-form-in-rails-3

in the "invite" partial
_invite.html.erb
<%= fields_for "user[invites_attributes][]", invite do |i| %>
  <li>
    <%= link_to("Remove", "#delete", :class => "delete-invite") %>
    <%= i.label :full_name, "Full Name" %>
    <%= i.text_field :full_name %>
    <%= i.label :email, "Email Address" %>
    <%= i.text_field :email %>
  </li>
<% end %>

I'm having some troubles with the first line: <%= fields_for
"user[invites_attributes][]", invite do |i| %>
What is the correct usage of that? I'm using formtastic and when I
made that line but with my fields

     <%= f.semantic_fields_for ("user[children_attributes][]", user)
do |fes| %>

and I get this error

  ............... unexpected ',', expecting ')'

I hope someone can help

Thanks in advance

Hello,

I'm having some trouble with forms, my app allows to enter data by
using a multi-step form that has 7 steps.
There are 3 steps that may let the user to add 1 form, for example
there's a step called "children"
and that children has the following fields:
* name
* age
* gender
but one father may have more than 1 child and I'm adding another form
with ajax by following this
http://stackoverflow.com/questions/4812003/adding-fields-dynamically-in-a-nested-model-form-in-rails-3

I haven't followed that particular tutorial, but I have used the Railscasts (73 - 75) and Ryan Bates' fabulous nested_form gem. Note that the 'casts show how to do it long-hand, and the gem simply wraps up all that work and puts a bow on it. You can probably simply follow the directions from the gem and get on with your life if you already know the theory.

Walter

Hello,

I'm having some trouble with forms, my app allows to enter data by
using a multi-step form that has 7 steps.
There are 3 steps that may let the user to add 1 form, for example
there's a step called "children"
and that children has the following fields:
* name
* age
* gender
but one father may have more than 1 child and I'm adding another form
with ajax by following this
http://stackoverflow.com/questions/4812003/adding-fields-dynamically-in-a-nested-model-form-in-rails-3

in the "invite" partial
_invite.html.erb
<%= fields_for "user[invites_attributes][]", invite do |i| %>
<li>
<%= link_to("Remove", "#delete", :class => "delete-invite") %>
<%= i.label :full_name, "Full Name" %>
<%= i.text_field :full_name %>
<%= i.label :email, "Email Address" %>
<%= i.text_field :email %>
</li>
<% end %>

I'm having some troubles with the first line: <%= fields_for
"user[invites_attributes][]", invite do |i| %>
What is the correct usage of that? I'm using formtastic and when I
made that line but with my fields

&lt;%= f\.semantic\_fields\_for \(&quot;user\[children\_attributes\]\[\]&quot;, user\)

You should not have a space between semantic_fields_for and (. That
is ruby syntax. Whether it fixes you problem is another matter.

Colin

Hello,

I'm having some trouble with forms, my app allows to enter data by
using a multi-step form that has 7 steps.
There are 3 steps that may let the user to add 1 form, for example
there's a step called "children"
and that children has the following fields:
* name
* age
* gender
but one father may have more than 1 child and I'm adding another form
with ajax by following this
http://stackoverflow.com/questions/4812003/adding-fields-dynamically-in-a-nested-model-form-in-rails-3

in the "invite" partial
_invite.html.erb
<%= fields_for "user[invites_attributes][]", invite do |i| %>
<li>
   <%= link_to("Remove", "#delete", :class => "delete-invite") %>
   <%= i.label :full_name, "Full Name" %>
   <%= i.text_field :full_name %>
   <%= i.label :email, "Email Address" %>
   <%= i.text_field :email %>
</li>
<% end %>

I'm having some troubles with the first line: <%= fields_for
"user[invites_attributes][]", invite do |i| %>
What is the correct usage of that? I'm using formtastic and when I
made that line but with my fields

    <%= f.semantic_fields_for ("user[children_attributes][]", user)
do |fes| %>

and I get this error

............... unexpected ',', expecting ')'

I hope someone can help

Thanks in advance

I think that the space after f.semantic_fields_for and the parentheses around the argument list are interacting to produce the error.

I think that you can probably do either fix and resolve the issue:

     <%= f.semantic_fields_for "user[children_attributes][]", user do |fes> %>

     <%= f.semantic_fields_for("user[children_attributes][]", user) do

fes> %>

-Rob

Rob Biedenharn
Rob@AgileConsultingLLC.com http://AgileConsultingLLC.com/
rab@GaslightSoftware.com http://GaslightSoftware.com/

Thanks for your reply,

I’ve seen that cast, but when I add another form for another children the HTML shows this

so it’s not increasing and it will only save the first child

and now I’m trying what the cast says

_children.html.erb

<%= f.semantic_fields_for “user[children][]”, user do |children| %>

<% end %>

undefined local variable or method `user'

and I get this

It’s maybe something I’m not seeing, I’m starting with rails and I hope someone can help me

Thanks

In the casts I've seen this

<div id="tasks">
  <%= render :partial => 'task', :collection => @project.tasks %>
</div>

so as far as I understand theres a file _task.html.erb, but they
create tasks by building it in the controller
should I do something like that?, I mean
<%= render "children", :collection => @user.childrens %>

Thanks for your reply,

I've seen that cast, but when I add another form for another children the HTML shows this

<input id="user_children_attributes_0_name" maxlength="255" name="user[children_attributes][0][name]" type="text">

so it's not increasing and it will only save the first child

and now I'm trying what the cast says

_children.html.erb

<%= f.semantic_fields_for "user[children][]", user do |children| %>
.....
<% end %>

and I get this
undefined local variable or method `user'

It's maybe something I'm not seeing, I'm starting with rails and I hope someone can help me

Here's an extraction from a site that's using Ryan's plug-in (a person can have N images):

#people_controller.rb
...
  def new
    @person = Person.new
    @person.images.build
  end
...

#person.rb
class Person < ActiveRecord::Base
  attr_accessible :images_attributes, :name, :sort_name, :birth, :death, :nationality, :historical_period, :short_description, :bio
  has_many :images, :as => :attachable, :dependent => :destroy
  accepts_nested_attributes_for :images, :reject_if => lambda { |a| a[:file].blank? && a[:file_uid].blank? && a[:file_url].blank? && a[:name].blank? }, :allow_destroy => true
  validates :name, :presence => true
  validates :nationality, :presence => true
  validates :historical_period, :presence => true
end

#image.rb
class Image < ActiveRecord::Base
  attr_accessible :name, :attachable_type, :attachable_id, :file_name, :file_url, :file_uid, :file, :retained_file, :remove_file, :created_at, :file_height, :updated_at, :file_width
  image_accessor :file
  belongs_to :attachable, :polymorphic => true
  def label
    name.blank? ? file_name : name
  end
end

#people/_form.html.erb
<%= nested_form_for @person, :url => person_path(@person, :page => params[:page]), :html => {:multipart => true} do |f| %>
<%= f.error_messages %>

...

<div id="images" class="tabbed">
  <%= f.fields_for :images %>
  <p class="clear-both">
    <%= f.link_to_add "Add an image", :images %>
  </p>
</div>
<p><%= f.submit %></p>
<% end %>

#people/_image_fields.html.erb (this name is critical to success)
<p class="clear-both image">
  <%- if f.object.file_uid -%>
  <span class="left">
    <%= link_to( image_tag( f.object.file.thumb('60x60#').url, :class => 'border', :size => '60x60' ), f.object.file.url, :target => '_blank') %><br /><span class="hint"><%= f.object.file_width %> × <%= f.object.file_height %></span>
  </span>
  <%= f.link_to_remove "Delete", :class => 'delete' %>
  <%- else -%>
  <span class="left">
    <%= image_tag( 'thumb_new.jpg', :class => 'border', :size => '60x60' ) %>
  </span>
  <%- end -%>
  <%= f.label :name %>
  <%= f.text_field :name %><br />
  <%= f.label :file, "Upload" %>
  <%= f.file_field :file %>
  <%= f.hidden_field :retained_file %><br />
  <%= f.label :file_url, "Upload From URL" %>
  <%= f.text_field :file_url %>
</p>

That is quite literally all there is to it, except to follow the rest of the install directions on the Github page.

Walter