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.