【问题标题】:How to generate many of the same form fields如何生成许多相同的表单域
【发布时间】:2011-06-22 03:57:28
【问题描述】:

我有一个Product 模型,下表包含一个ProductsController 和Form:

    class CreateProducts < ActiveRecord::Migration
      def self.up
        create_table :products do |t|
          t.string  :name
          t.decimal :price
          t.string :location

    end

如何在我的表单上再次生成 name 和 price 六次以在数据库中制作六种产品(六是我刚刚扔在那里的数字)?

编辑:添加了 :location 以对我正在尝试做的事情进行更多解释。

仅在一个表单上,用户可以创建产品,并且可以拥有任意数量的产品(:name 和:price),并且在提交表单时都具有相同的:location。这基本上是Nested Models 的一种方法,但只有一个表(包括 Railscast Ajax,我会自己放入)。

【问题讨论】:

  • 您可能需要澄清您的要求。这不是很清楚。你能给出一个伪代码示例吗?您是指在模板中,还是在您的迁移中?
  • @dd1wtq 添加更多,如果您需要更多,请随时询问!

标签: ruby-on-rails


【解决方案1】:

Rails 支持输入数组。 products[] 之类的东西可以提交给控制器

否则,您在提交具有相同名称和 ID 输入的表单时会遇到问题。您可以将所有输入捆绑到一个 Javascript 数组中并通过 POST 提交。

如果您使用的是 jQuery,您可以像这样命名所有产品名称输入:

<input class="product_name" type="text">
<input class="product_name" type="text">
<input class="product_name" type="text">

做类似的事情

var products_array = [];
$(".products").each(function() {
  products_array.push($(this).val());
});

出于好奇,您为什么要在一个页面上输入多个产品?这像发票类型的东西吗?

【讨论】:

  • 用户可以创建产品,但一次输入一个产品很麻烦,必须创建,返回页面并重新开始,无论用户需要多少次。
  • 我需要知道多少 Jquery 才能做到这一点?到目前为止,我对 Jquery 的经验很少。你写的对我来说有点道理。
  • 添加更多内容以进行更多说明
  • 在高级视图中,我会创建一些动态添加新字段的 JS。 (使用 jQuery 或 Prototype,随心所欲)。确保它们的 name 属性指定了一个数组:&lt;input type="text" name="product_name[]&gt; 然后在您的控制器中,使用 Ruby 的 each() 方法将每个项目提交到数据库。
【解决方案2】:

Railscast 讨论多行表单创建技术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2013-04-04
    • 2017-06-03
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多