Rails 3 enviar um formulário com vários registros

Eu sou novo em rails, então esta é provavelmente uma questão básica. Eu estou tentando criar um formulário onde o usuário pode criar 3 registros de uma só vez. Eu quero que o usuário tenha apenas que clicar no botão enviar uma vez. Estou enviando para o meu modelo de revisão um nome, comentário e sorting. Atualmente, apenas o último registro é inserido no database.

   "5" %>   "3" %>   "1" %> 
Rank Name Comment
1
2
3

Qualquer conselho é apreciado. Obrigado.

Eu recomendaria usar fields_for para isso:

 <%= form_for([@user, :reviews]) do |f| %> <% @reviews.each do |review| %> <%= fields_for review do |r| %> <%= render "reviews/form", :r => r %> <% end %> <% end %> <% end %> 

Para que isso funcione, você precisará criar quantos objects de revisão forem necessários em seu 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 

Isso criaria novas instâncias de registros de revisão para esse usuário, o que é diferente dos novos registros . Instâncias são simplesmente objects Ruby. Agora, como você chamou @user.reviews.build três vezes, verá três comentários em sua visualização.

 def create @user = User.find(params[:id]) @reviews = Review.create(params[:reviews]) # Some more logic for validating the parameters passed in end 

Isso criará três novos objects de Review e os vinculará a @user , assumindo que todos os três sejam válidos.

Você precisará dizer ao rails que é um array. Primeiro, leia esta seção deste artigo :

Para o seu propósito, você precisará criar o formulário manualmente:

 <%= 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 %> 
Intereting Posts