Отправка нескольких записей без вложенности - PullRequest
4 голосов
/ 25 августа 2011

Я уверен, что перебираю эту проблему, но не могу понять, как просто создать и отправить несколько записей одновременно.У меня есть модель пользователя и модель прогнозирования.Пользователь имеет_ множество прогнозов, а прогноз принадлежит_ пользователю.Я вложил свои маршруты примерно так:

:resources users do 
    :resources predictions
end

, когда я захожу на сайт users / 1 /вестии / новый, мне нужно создать 6 записей прогноза и сразу отправить их в базу данных.

В моем контроллере Predictions:

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

И в моем Prediction 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 %>

Это показывает и передает только одну запись вместо 3.Я подумал, что мне, возможно, придется использовать: acceptpts_nested_attributes_for, однако мне не нужно создавать и обновлять модели пользователей одновременно.Существующие пользователи будут создавать прогнозы по 3 записи за раз для нескольких гонок, так как это приложение для фэнтези-спорта.

1 Ответ

2 голосов
/ 28 августа 2011

Я думаю, что самый первый элемент, вложенный маршрут, возможно, не тот подход, который вы ищете.Это может связать вас с 1 новой записью прогноза модели в форме.

Вы действительно хотите accepts_nested_attributes_for в вашей модели.С этим набором используйте form_for (и simple_form_for, если это возможно, используя гем simple_form ).Затем с помощью кода вида form_for @user сделайте | f |используйте f.fields_for: предсказание

Методы сохранения пользовательского контроллера также автоматически проверят и сохранят вложенные записи.

Как вы, возможно, знаете, у Райана Бейтса есть отличные railscasts для этого.

...