Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails loop through data in a form field

I would like to loop through data in my database inside my form. What I would like to do with the data is put it in labels and textboxes. How could I do this in rails? Would I just use a .each block to loop through it inside the form? The reason I have it in my database is because my client would like to be able to add the form field data himself.


For example here is something I would like to do:

<%= form_for :order do |f| %>
  @fields.each do |field|
    <%= f.label field.name %>
    <%= f.text_field field.name %>
  <% end %>
  <%= f.submit %>
<% end %>

What the best way to accomplish something like this?

Please don't answer with a railscast :)

Thanks in advance

like image 843
Jake Avatar asked Oct 25 '22 07:10

Jake


1 Answers

Yes, that will work, though you missed an end script tag on line two:

<%= form_for :order do |f| %>
   <% @fields.each do |field| %>  
       <%= f.label field.name %>
       <%= f.text_field field.name %>
   <% end %>
   <%= f.submit %>
<% end %>

If you need something more complex than just a label/text field pair - then you can use a partial-template and use the collection keyword:

<!-- in 'order.html.erb' -->
<%= form_for :order do |f| %>
   <!-- note: each 'field' is auto-populated from the collection/partial-name, but you need to pass the form in as a local -->
   <%= render :partial => 'field', :collection => @fields, :locals => {:f => f} %>  
   <%= f.submit %>
<% end %>

and

<!-- in '_field.html.erb' -->
<%= f.label field.name %>
<%= f.text_field field.name %>
<!-- and whatever else you want to do... -->

more on partial rendering here: http://api.rubyonrails.org/classes/ActionView/Partials.html

like image 114
Taryn East Avatar answered Oct 27 '22 09:10

Taryn East