tag rails how form for fields_for example accepts_nested_attributes_for ruby-on-rails activerecord nested nested-forms nested-attributes

ruby on rails - rails - MĂșltiples registros enviados sin anidar



nested forms rails 5 (1)

Estoy seguro de que ya no estoy pensando en este problema, pero parece que no puedo imaginar cómo crear y enviar múltiples registros a la vez. Tengo un modelo de Usuario y un modelo de Predicción. El usuario tiene muchas predicciones y una Predicción pertenece a un usuario. He anidado mis rutas como tal

:resources users do :resources predictions end

cuando visito users / 1 / predictions / new, necesito crear 6 registros de Predicción y enviarlos de inmediato al db.

En mi controlador de predicciones:

before_filter :load_user def new 3.times { @user.predictions.build } end def create @prediction = @user.predictions.new(params[:prediction]) if @prediction.save redirect_to @user, :notice => ''Prediction added'' else redirect_to @user, :notice => ''Unable to add'' end end def destroy @prediction = @user.prediction.find(params[:id]) @prediction.destroy redirect_to @user, :notice => "Prediction deleted" end private def load_user @user = current_user end

Y en mi Predicción new.html.erb:

<%= form_for ([@user, @user.predictions.new]) do |f| %> <div class="fields"> <%= f.label :position %> <%= f.text_field :position %> </div> <div class="fields"> <%= f.label :athlete_id, ''Athlete''%> <%= f.collection_select(:athlete_id, Athlete.all, :id, :name, :prompt => ''Select an athlete'' )%> </div> <div class="fields"> <%= f.label :race_id, ''Race''%> <%= f.collection_select(:race_id, Race.upcoming, :id, :name, :prompt => ''Select a race'' )%> </div> <div class="actions"><%= f.submit %></div> <% end %>

Esto muestra y envía solo un registro en lugar de 3. Pensé que debería usar: accepts_nested_attributes_for, sin embargo, no necesito crear y actualizar los modelos de usuario al mismo tiempo. Los usuarios existentes estarán creando predicciones 3 registros a la vez para varias carreras, ya que esta es una aplicación de deportes de fantasía.


Creo que el primer elemento, la ruta anidada, puede no ser el enfoque que estás buscando. Eso puede vincularlo a 1 nuevo registro de predicción de modelo en el formulario.

De hecho, usted quiere accepts_nested_attributes_for en su modelo. Con ese conjunto usa form_for (y simple_form_for si es posible, usando la gema simple_form ). Luego, con un código como form_for @user do | f | use f.fields_for: prediction

Los métodos de guardado del controlador de usuario también validarán y guardarán los registros anidados automáticamente.

Como sabrán, Ryan Bates tiene excelentes transmisiones para esto.