ruby-on-rails - Rails 3 提交包含多条记录的表单

标签 ruby-on-rails forms ruby-on-rails-3

我是 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/

相关文章:

ruby-on-rails - 如何处理 RSpec 和 Rails 中的模拟嵌套资源?

VB.NET 设计器错误 : How to (correctly) inherit form that inherits form?

forms - rails 3 form_for不输出任何内容

ruby-on-rails - Rails 数据库迁移 - 如何删除表?

ruby-on-rails - 在 Rails 3 中,link_to_function 消失到哪里去了?

ruby-on-rails - `rails spec` 做了什么而 `rspec` 没有?

css - Rails 应用程序上的管理员是否有一个良好的兼容 Bootstrap 的 CSS?

jQuery 如何让选择更改以多种形式工作?

ruby - 在 Ruby 中使用断言但不作为单元测试的一部分的最佳实践是什么?

ruby-on-rails - haml rspec 缺少模板