我确定我已经在考虑这个问题,但我似乎无法弄清楚如何一次创建和提交多个记录。我有一个用户模型和一个预测模型。用户has_many预测,预测属于用户。我已经嵌套了我的路线
:resources users do
:resources predictions
end
当我访问users / 1 / predictions / new时,我需要创建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
在我的预测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.我想我可能必须使用:accepts_nested_attributes_for,但我不需要同时创建和更新用户模型。现有用户将为多场比赛一次创建预测3条记录,因为这是一款奇幻体育应用程序。
答案 0 :(得分:2)
我认为第一项,嵌套路线可能不是您正在寻找的方法。这可能会将您降低到表单上的1个新模型预测记录。
您确实希望模型中有accepts_nested_attributes_for
。使用该集合,使用form_for(如果可能,使用simple_form gem,使用simple_form_for)。然后使用代码
form_for @user do | f |
使用f.fields_for:prediction
用户控制器保存方法还将自动验证并保存嵌套记录。
你可能知道Ryan Bates对此有很好的railscasts。