嵌套表单,包含来自不相关表的其他数据

时间:2014-08-12 11:25:36

标签: ruby-on-rails ruby-on-rails-4

也许我正在过度思考这个问题,但我希望能够使用依赖于来自另一个表的数据的嵌套表单。让我详细说明一下。

我有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表中填充大量未使用的数据。如果由于某种原因添加了新的提供者,那么这种方法也会在以后阻碍它。

我不知道如何继续,任何指针都会非常感激。

1 个答案:

答案 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