我是 Rails 新手,所以这可能是一个基本问题。我正在尝试创建一个用户可以一次创建 3 条记录的表单。我希望用户只需单击一次提交按钮。我正在向我的评论模型提交名称、评论和评级。目前,只有最后一条记录被输入到数据库中。
<%= form_for([@user,@review]) do |f| %>
<table>
<tr>
<td>Rank</td>
<td>Name</td>
<td>Comment</td>
</tr>
<tr>
<td>1</td>
<td><%= f.text_field :name %></td>
<td><%= f.text_field :comment %></td>
<%= f.hidden_field :rating, :value=> "5" %>
</tr>
<tr>
<td>2</td>
<td><%= f.text_field :name %></td>
<td><%= f.text_field :comment %></td>
<%= f.hidden_field :rating, :value=> "3" %>
</tr>
<tr>
<td>3</td>
<td><%= f.text_field :name %></td>
<td><%= f.text_field :comment %></td>
<%= f.hidden_field :rating, :value=> "1" %>
</tr>
</table>
<div class="actions">
<%= f.submit "Create my top 3" %>
</div>
<% end %>
任何建议表示赞赏。谢谢。
最佳答案
我建议使用 fields_for
为了这:
<%= form_for([@user, :reviews]) do |f| %>
<% @reviews.each do |review| %>
<%= fields_for review do |r| %>
<%= render "reviews/form", :r => r %>
<% end %>
<% end %>
<% end %>
为了完成这项工作,您需要在 Controller 中构建所需数量的审阅对象:
def new
# you could also have this in a before_filter...
@user = User.find(params[:id])
@reviews = Array.new(3) { @user.reviews.build }
end
这将为此用户创建新的评论记录实例,这与新记录不同。实例只是 Ruby 对象。现在因为你打了
@user.reviews.build
三次,您会在 View 中看到三条评论。def create
@user = User.find(params[:id])
@reviews = Review.create(params[:reviews])
# Some more logic for validating the parameters passed in
end
这将创建三个新的
Review
对象并将它们链接到 @user
,假设这三个都是有效的。
关于ruby-on-rails - Rails 3 提交包含多条记录的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4641565/