ruby on rails - select_tag - Rails 3 envía un formulario con múltiples registros.
select_tag default value (2)
Soy nuevo en los rieles, así que esta es probablemente una pregunta básica. Estoy intentando crear un formulario donde el usuario puede crear 3 registros a la vez. Quiero que el usuario solo tenga que hacer clic en el botón enviar una vez. Estoy enviando a mi modelo de Revisión un nombre, comentario y calificación. Actualmente, solo el último registro se ingresa en la base de datos.
<%= form_for([@user,@review]) do |f| %>
<table>
<tr>
<td>Rank</td>
<td>Name</td>
<td>Comment</td>
</tr>
<tr>
<td>1</td>
<td><%= f.text_field :name %></td>
<td><%= f.text_field :comment %></td>
<%= f.hidden_field :rating, :value=> "5" %>
</tr>
<tr>
<td>2</td>
<td><%= f.text_field :name %></td>
<td><%= f.text_field :comment %></td>
<%= f.hidden_field :rating, :value=> "3" %>
</tr>
<tr>
<td>3</td>
<td><%= f.text_field :name %></td>
<td><%= f.text_field :comment %></td>
<%= f.hidden_field :rating, :value=> "1" %>
</tr>
</table>
<div class="actions">
<%= f.submit "Create my top 3" %>
</div>
<% end %>
Cualquier consejo es apreciado. Gracias.
Recomendaría usar fields_for
para esto:
<%= form_for([@user, :reviews]) do |f| %>
<% @reviews.each do |review| %>
<%= fields_for review do |r| %>
<%= render "reviews/form", :r => r %>
<% end %>
<% end %>
<% end %>
Para hacer que esto funcione, deberá crear tantos objetos de revisión como necesite en su controlador:
def new
# you could also have this in a before_filter...
@user = User.find(params[:id])
@reviews = Array.new(3) { @user.reviews.build }
end
Esto crearía nuevas instancias de registros de revisión para este usuario, que es diferente de los registros nuevos. Las instancias son simplemente objetos de rubí. Ahora porque ha llamado a @user.reviews.build
tres veces, verá tres revisiones en su vista.
def create
@user = User.find(params[:id])
@reviews = Review.create(params[:reviews])
# Some more logic for validating the parameters passed in
end
Esto creará tres nuevos objetos de Review
y los vinculará a @user
, asumiendo que los tres son válidos.
Tendrás que decirle a Rails que es una matriz. Primero, lea esta sección de este artículo :
Para tu propósito, necesitarás construir el formulario a mano:
<%= form_tag ''foo'' do %>
<% [1,3,5].each do |i| %>
<%= text_field_tag ''review[][name]'' %>
<%= text_field_tag ''review[][comment]'' %>
<%= hidden_field_tag ''review[][rating]'', :value => i %>
<% end %>
<% end %>