微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 多个记录提交而不嵌套

我确定我已经在考虑这个问题,但我似乎无法弄清楚如何简单地创建和提交多个记录.我有一个用户模型和一个预测模型.用户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,:prompt => 'Select a race' )%>
</div>
<div class="actions"><%= f.submit %></div>
<% end %>

显示并仅提交一条记录而不是3.我想我可能必须使用:accepts_nested_attributes_for,但是我不需要同时创建和更新用户模型.现有用户将为多场比赛一次创建预测3条记录,因为这是一款奇幻体育应用.

解决方法

我认为第一个项目,嵌套路线可能不是您正在寻找的方法.这可能会将您降低到表单上的1个新模型预测记录.

您确实需要在模型中使用accepts_nested_attributes_for.使用该set使用form_for(如果可能,使用simple_form_for,使用simple_form gem).然后使用代码
form_for @user do | f |
使用f.fields_for:预测

用户控制器保存方法还将自动验证并保存嵌套记录.

你可能知道Ryan Bates对此有很好的railscasts.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐