【问题标题】:How to create a multi-edit form in rails如何在 Rails 中创建多编辑表单
【发布时间】:2010-11-16 00:49:45
【问题描述】:

我需要在 Rails 中创建一个多编辑表单,如下所示:

<form>
<input type='text' name='input1'></input>
<input type='text' name='input2'></input>
<input type='text' name='input3'></input>
<input type='text' name='input4'></input>
<input type='text' name='input5'></input>
<br>
<input type='text' name='input1'></input>
<input type='text' name='input2'></input>
<input type='text' name='input3'></input>
<input type='text' name='input4'></input>
<input type='text' name='input5'></input>
<br>
<input type='text' name='input1'></input>
<input type='text' name='input2'></input>
<input type='text' name='input3'></input>
<input type='text' name='input4'></input>
<input type='text' name='input5'></input>
<br>

... 以此类推,然后“&lt;submit&gt;”按钮将位于最后。最后单击提交按钮应该会收集所有值并在控制器中解析它们。

我只需要知道如何在视图中生成多编辑表单。此外,每一行都是唯一的;我还需要知道如何为我猜想的每个输入标签分配一个唯一标识符;我确实有一个可以使用的唯一 ID 值。

【问题讨论】:

    标签: ruby-on-rails forms webforms


    【解决方案1】:

    这很容易完成,但我们需要更多信息。这些字段与您的模型有什么关系?这是一个具有许多字段、模型的许多实例还是其他东西的模型?


    在这种情况下您想要做的是使用表单构建器。它将根据命名约定生成输入字段,当它到达控制器时将被解析为更有用的格式。由于我没有关于您的模型的信息,因此我将使用一个假设示例:

    class Post < ActiveRecord::Base
      attr_accessible :title, :body, :author, :published_at
    end
    

    使用form_for 助手创建表单。它会给你一个 formbuilder 对象来创建输入字段。

    <% form_for :post do |f| -%>
      <p>
        <%= f.label :title %>
        <%= f.text_field :title %>
      </p>
      <p>
        <%= f.label :body %>
        <%= f.text_area :body %>
      </p>
      <p>
        <%= f.label :author %>
        <%= f.text_field :author %>
      </p>
      <p>
        <%= f.label :published_at %>
        <%= f.datetime_select :published_at %>
      </p>
    <% end -%>
    

    使用助手的主要好处是它生成的输入的name 属性。由于body 属于post 的表单,它将被赋予名称属性post[body]。这些属性将被解析为以下哈希:

    :post => {
      :title => "This is the title",
      :body => "this is the body",
      :author => "John Doe",
      :published_at => "Mon Nov 15 2010 19:23:40 GMT-0600 (CST)"
    }
    

    这意味着您无需手动将字段复制到模型中。您可以直接将其传递给Model#new 方法:

    @post = Post.new(params[:post])
    

    然后进行验证检查。当您开始将模型相互嵌套时,这一约定变得必不可少。

    See here 获取更详尽的表单助手指南。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2013-05-05
      • 2019-06-13
      相关资源
      最近更新 更多