【发布时间】:2019-08-12 19:21:13
【问题描述】:
我有一个模型与另一个模型有两种不同的关联:
class Order < ApplicationRecord
belongs_to :customer, required: true
belongs_to :delivery_address,
class_name: 'Address',
foreign_key: :delivery_address_id
belongs_to :collection_address,
class_name: 'Address',
foreign_key: :collection_address_id
accepts_nested_attributes_for :collection_address, :delivery_address
end
它接受嵌套属性:
<h1>Edit order</h1>
<%= simple_form_for @order, url: order_path do |form| %>
<strong>Collection address</strong>
<%= form.simple_fields_for @collection_address, as: :collection_address do |collection_address_form| %>
<%= collection_address_form.input :address1 %>
...
<% end %>
<br>
<strong>Re-delivery address</strong>
<%= form.simple_fields_for @redelivery_address, as: :delivery_address do |delivery_address_form| %>
<%= delivery_address_form.input :address1 %>
...
<% end %>
<%= form.button :submit %>
<% end %>
我想接收两组参数:params[:collection_address 和 params[:delivery_address。
但是,当表单提交时,控制器不会收到两个地址的参数。相反,它在密钥 params[:address] 下接收一组。
我了解form_for 接受:as 选项。我上面用过。我希望得到params[:delivery_address] 和params[:collection_address],但我只得到params[:address]。
这应该适用于简单表单还是我需要做一些不同的事情?我的代码有什么问题会阻止创建两组参数吗?
【问题讨论】:
-
我认为这与
:address1被用于两者有关。 -
您确实不需要将实例变量传递给
simple_fields_for。只需传递协会的名称。form.simple_fields_for :collection_address。url: order_path也是多余的。约定优于配置宝贝! -
我指定了
order_path,因为控制器与模型不同。我有理由。但是,是的,会优先使用约定而不是配置。
标签: ruby-on-rails form-for simple-form-for