我想知道将一个表单字段的值应用于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
答案 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