也许我正在过度思考这个问题,但我希望能够使用依赖于来自另一个表的数据的嵌套表单。让我详细说明一下。
我有4个表,其中包含以下伪代码:
Product
has_many: providers
Provider
belongs_to: product
Sale
has_many: products
has_many: orders
accepts_nested_attributes_for :orders
Order
belongs_to: sale
到目前为止,非常好。
当我尝试进行销售时,我的问题就开始了。每个产品都有X个供应商(通常是4个),每个销售总会有一个订单,每个供应商(即使它是0),所以我需要每个供应商的数据,所以我可以指定我多少从每个订购。
我有这样的事情:
=form_for @sale do |s|
=s.label :date, 'Date'
=s.text_field :date
=s.label :other, 'Other Information'
=s.text_area :other
=s.object.product.providers.each do |p|
=s.fields_for :orders do |o|
=p.name
=o.label :amount, 'Amount'
=o.text_field :amount
这不起作用。这样做的目的是获得每个产品的提供商数量,并列出每个提供商的名称 - 到目前为止,这么好 - 但我需要指定每个产品将在订单中收到的金额。如果有数据,text_field将填充在Orders中匹配的第一条记录,但由于我循环遍历它,所以还会为剩余的3填充相同的数据。
我知道我的逻辑是有缺陷的(过去4个小时我一直在努力)。我认为这是回到绘图板(我现在正在做)的问题,但我想看看是否有人可能会看到明显的。
我希望看到的是这样的:
|--Provider Name--|---Amount----|
|-----------------|-------------|
| Provider One | 10 |
| Provider Two | 2 |
| Provider Three | 0 |
| Provider Four | 4 |
|-----------------|-------------|
每行的“金额”是表单金额字段的text_field。最初,text_fields应该是空的,所以我可以用数据填充它们。一旦他们拥有数据,他们就应该使用之前使用的数据。很标准。
当我访问新的Sale页面时,我考虑在Orders表上创建那些x量的记录,但是这会让我在Order表中填充大量未使用的数据。如果由于某种原因添加了新的提供者,那么这种方法也会在以后阻碍它。
我不知道如何继续,任何指针都会非常感激。
答案 0 :(得分:0)
尝试使用此代码获取订单的text_fields列表:
=form_for @sale do |s|
=s.label :date, 'Date'
=s.text_field :date
=s.label :other, 'Other Information'
=s.text_area :other
=s.products.each do |product|
=product.providers.each do |provide|
=p.name
=s.fields_for :orders do |o|
=o.label :amount, 'Amount'
=o.text_field :amount