将一个字段的值应用于rails中的多个记录

时间:2015-11-11 01:08:15

标签: ruby-on-rails forms

我想知道将一个表单字段的值应用于rails中的多个记录的最佳方法。

我将有一个视图,渲染部分,每个部分将创建一个记录。记录将具有关联,数量和类别。我希望用户能够为多个记录键入一个类别,但我找不到任何方法来执行此操作。

实际上,我希望用户使用以下表单: Cat1 Item1 1 Item2 2 Item3 3 Cat2 Item4 4 Item5 5 Cat3 Item6 6 Cat4 Item7 7 并让它创建如下记录: Cat1 Item1 1 Cat1 Item2 2 Cat1 Item3 3 Cat2 Item4 4 Cat2 Item5 5 Cat3 Item6 6 Cat4 Item7 7

1 个答案:

答案 0 :(得分:1)

我在我的项目中做了类似的事情,但它有点复杂。

我在页面上使用javascript,这样每当用户在某个类别下输入新项目时,另一个空白字段就会出现在下一个项目的表单中。每个项目的字段名称和ID都以“__n”为后缀,其中n是一个递增的计数器,因此所有名称和ID都是唯一的并且匹配项目,如下所示:

<div class="category-input" id="cat1" >
  <h2>Category 1</h2>
  <div class="record-input">
    <input type="text" name="cat1-item-name__0" />
    <input type="number" name="cat1-item-amount__0" />
  </div
  <div class="record-input">
    <input type="text" name="cat1-item-name__1" />
    <input type="number" name="cat1-item-amount__1" />
  </div
</div>

然后在控制器中我必须对所有参数进行排序并为每个参数创建记录。我将这些值放入哈希值,使其更容易:

categories.each do |cat|
  items = Hash[params.select{ |param| param[/^#{cat}-item-name__\d+$/] }.map{ |k,v| [k.split('__').last,v] }]
  amounts = Hash[params.select{ |param| param[/^#{cat}-item-amount__\d+$/] }.map{ |k,v| [k.split('__').last,v] }]
  # make records for category `cat` from these hashes
end