1

我有一个Product模型、一个Order和一个OrderItem模型。
一个OrderItem对象有一个Product(即它是belongs to一个产品)
一个Order有多个订单项。

当您想在OrderItem订单中添加一个时,您需要填写一张表格。其中一个字段是输入将分配给此订单项目的产品。订单模型将 存储product_id为外键,因此 Rails 在我编写时会抱怨(应该如此)

<%= form_for @orderItem, url: {:action => :create} do |f| %>
    <p>
      <%= f.label :product_name %>
      <%= f.text_field :product_name %>
    </p>
    <%= f.submit %>
<% end %>

我的想法是让某人使用表单来创建订单项目。当他们选择分配给该订单项目的产品时,他们将从产品名称列表中选择一个名称(这是唯一的),然后当他们提交表单时,控制器检索适当的Product对象并将其 ID 分配给OrderItem.

我怎样才能设置我的表格来完成这个?

4

1 回答 1

0

听起来您想使用嵌套属性。它们可以让您从一个表单中同时保存有关 anOrderItem和 a的信息。Product

在您的OrderItem中,添加该行accepts_nested_attributes_for :product

然后在你的表格中,你会想要这样的东西:

<%= form_for @orderItem, url: {:action => :create} do |f| %>
    <p>
      <%= fields_for :product do |fp| %>
        <%= fp.label :product_name %>
        <%= fp.text_field :product_name %>
      <% end %>
    </p>
    <%= f.submit %>
<% end %>

(注意在块内使用fp.label代替。f.labelfields_for

以上内容来自记忆,因此可能存在一些错误(您可能也需要更改您的内容OrderItemsController),但它应该为您提供一个起点。

你可能会发现这个 Railscast也很有帮助。

于 2013-10-31T04:17:05.297 回答