使用表单帮助程序按名称选取对象,但分配与该名称关联的 ID



我有一个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

如何设置表单来实现此目的?

听起来你想使用嵌套属性。它们允许您从单个表单同时保存有关OrderItemProduct的信息。

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 %>

(请注意,在fields_for块中使用fp.label而不是f.label

以上是记忆中的,所以可能会有一些错误(你可能也需要改变你的OrderItemsController),但它应该给你一个起点。

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

最新更新