Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何创建一个嵌套表单,该表单包含一个字段列表,其长度取决于另一个模型的计数?_Ruby On Rails_Ruby On Rails 4_Nested Forms - Fatal编程技术网

Ruby on rails 如何创建一个嵌套表单,该表单包含一个字段列表,其长度取决于另一个模型的计数?

Ruby on rails 如何创建一个嵌套表单,该表单包含一个字段列表,其长度取决于另一个模型的计数?,ruby-on-rails,ruby-on-rails-4,nested-forms,Ruby On Rails,Ruby On Rails 4,Nested Forms,我的应用程序包含客户和项目。对于不同的客户,商品可以有不同的价格。因此,我有一个prices表,它引用了customers和items表 创建新项目时,我希望用户也能够在同一表单上为每个客户单独设置每个价格。所以,在商品表单上,如果有3个客户,我应该看到3个名字,每个名字旁边都有一个价格字段 问题是,那些价格记录实际上还不存在,我不知道如何构建该列表并正确呈现它 如何构建此表单 下面是我到目前为止得到的(尽可能多地提炼) [更新]-我已经知道如何获得视图中呈现的所有字段。但是,每个生成的价格字段

我的应用程序包含客户和项目。对于不同的客户,商品可以有不同的价格。因此,我有一个
prices
表,它引用了
customers
items

创建新项目时,我希望用户也能够在同一表单上为每个客户单独设置每个价格。所以,在商品表单上,如果有3个客户,我应该看到3个名字,每个名字旁边都有一个价格字段

问题是,那些价格记录实际上还不存在,我不知道如何构建该列表并正确呈现它

如何构建此表单

下面是我到目前为止得到的(尽可能多地提炼)

[更新]-我已经知道如何获得视图中呈现的所有字段。但是,每个生成的价格字段的ID都是相同的,我认为这会破坏发送的JSON(即使表单上有多个价格字段,也只会收到一个价格)。基于这些文档,我认为我应该能够在的字段中包含数组(
@item.prices
),而不是包含
@items.prices.each
,但这会引发价格的“未定义方法错误”

客户型号:

class Customer < ActiveRecord::Base
  has_many :prices
  has_many :items, through: :prices
end
class Item < ActiveRecord::Base
  has_many :prices
  has_many :customers, through: :prices
  accepts_nested_attributes_for :prices 
end
class Price < ActiveRecord::Base
  belongs_to :item
  belongs_to :customer
end
def new
    @item = Item.new
    @customers = Customer.all

    @customers.each do |cust|
        @item.prices.build
        # somehow need to also make all these new items have the correct customer IDs
    end
end
当前新项目视图:[已更新]

<%= form_for :item, url: items_path do |f| %>
    <p>
    <%= f.label :name, 'Item Name' %><br />
    <%= f.text_field :name, class: 'form-control', :autofocus => true %>
    </p>

    <% @item.prices.each do |item| %>
        <%= f.fields_for :prices, item do |p| %>
            <p>
                <%= p.label :price_in_cents, 'Price' %><br />
                <%= p.text_field :price_in_cents, class: 'form-control' %>
            </p>
        <% end %>
    <% end %>

    <div class="form-group">
        <%= f.submit 'Create', class: 'btn btn-primary' %>
    </div>
<% end %>



正确%>



我是一个RoR新手,我很难想象这应该如何构建。有什么见解吗?

我推荐cocoon gem。它将在调用页面时动态创建所需的表单数量

我想这会对你有所帮助,谢谢,我一直在翻阅那些片段,但在我的特殊情况下,它仍然不适合我。我更新了我的问题,希望澄清我到底需要做什么。哦,很有趣,谢谢!我可能会尝试一下,但是,我仍然想了解如何在没有插件的情况下实现这一点。