嵌套表单:如何使用 fields_for 正确访问特定实例
Nested forms: How to correctly access a certain instance with fields_for
我有一个订单,它总是恰好有两个地址:一个发票地址和一个送货地址。在视图中,我有一个表单,您可以在其中输入两个地址。我从我的控制器传递实例 @order,其中已经构建了 addresses 的两个子实例。
从我的 OrdersConntroller 中提取:
def new
@order = Order.new(orderCreationDate: Time.now)
2.times{ @order.addresses.build }
end
在视图中,如何才能只访问第一个@order.addresses,然后在其他地方访问第二个@order.addresses?
到目前为止我尝试过的:
<%= form_for @order do |f| %>
...
<%= f.fields_for :addresses do |ff| %>
<%= ff.text_field :firstName %>
...
<% end %>
<% end %>
但是 HTML 结果如下(name 和 id 不对)
<input type="text" name="order[a][firstName]" id="order_a_firstName">
从我的 订单 模型中提取:
has_many :addresses, foreign_key: "orderID"
accepts_nested_attributes_for :addresses, allow_destroy: true
感谢支持。
您需要创建两个模型 1) InvoiceAddress 和 2) ShippingAddress
class InvoiceAddress < ActiveRecord::Base
self.table_name = :address
end
class ShippingAddress < ActiveRecord::Base
self.table_name = :address
end
为了模型使用关联如下
has_one :invoice_address
has_one :shipping_address
和orders_controller.rb
def new
@order = Order.new(orderCreationDate: Time.now)
@invoice_address = @order.build_invoice_address
@shipping_address = @order.build_shipping_address
end
表格将是
<%= form_for @order do |f| %>
...
<%= f.fields_for :invoice_address, @invoice_address do |ff| %>
<%= ff.text_field :firstName %>
...
<% end %>
<%= f.fields_for :shipping_address, @shipping_address do |ff| %>
<%= ff.text_field :firstName %>
...
<% end %>
<% end %>
我有一个订单,它总是恰好有两个地址:一个发票地址和一个送货地址。在视图中,我有一个表单,您可以在其中输入两个地址。我从我的控制器传递实例 @order,其中已经构建了 addresses 的两个子实例。
从我的 OrdersConntroller 中提取:
def new
@order = Order.new(orderCreationDate: Time.now)
2.times{ @order.addresses.build }
end
在视图中,如何才能只访问第一个@order.addresses,然后在其他地方访问第二个@order.addresses?
到目前为止我尝试过的:
<%= form_for @order do |f| %>
...
<%= f.fields_for :addresses do |ff| %>
<%= ff.text_field :firstName %>
...
<% end %>
<% end %>
但是 HTML 结果如下(name 和 id 不对)
<input type="text" name="order[a][firstName]" id="order_a_firstName">
从我的 订单 模型中提取:
has_many :addresses, foreign_key: "orderID"
accepts_nested_attributes_for :addresses, allow_destroy: true
感谢支持。
您需要创建两个模型 1) InvoiceAddress 和 2) ShippingAddress
class InvoiceAddress < ActiveRecord::Base
self.table_name = :address
end
class ShippingAddress < ActiveRecord::Base
self.table_name = :address
end
为了模型使用关联如下
has_one :invoice_address
has_one :shipping_address
和orders_controller.rb
def new
@order = Order.new(orderCreationDate: Time.now)
@invoice_address = @order.build_invoice_address
@shipping_address = @order.build_shipping_address
end
表格将是
<%= form_for @order do |f| %>
...
<%= f.fields_for :invoice_address, @invoice_address do |ff| %>
<%= ff.text_field :firstName %>
...
<% end %>
<%= f.fields_for :shipping_address, @shipping_address do |ff| %>
<%= ff.text_field :firstName %>
...
<% end %>
<% end %>