【问题标题】:Rails/SimpleForm: How do I specify the params for two sets of nested attributes?Rails/SimpleForm:如何为两组嵌套属性指定参数?
【发布时间】: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_addressparams[:delivery_address

但是,当表单提交时,控制器不会收到两个地址的参数。相反,它在密钥 params[:address] 下接收一组。

我了解form_for 接受:as 选项。我上面用过。我希望得到params[:delivery_address]params[:collection_address],但我只得到params[:address]

这应该适用于简单表单还是我需要做一些不同的事情?我的代码有什么问题会阻止创建两组参数吗?

【问题讨论】:

  • 我认为这与:address1 被用于两者有关。
  • 您确实不需要将实例变量传递给simple_fields_for。只需传递协会的名称。 form.simple_fields_for :collection_addressurl: order_path 也是多余的。约定优于配置宝贝!
  • 我指定了order_path,因为控制器与模型不同。我有理由。但是,是的,会优先使用约定而不是配置。

标签: ruby-on-rails form-for simple-form-for


【解决方案1】:

你可以指定

&lt;%= delivery_address_form.input :address1, input_html: {name:'delivery_address[address1]' } %&gt;

对于每个字段。我知道这感觉有点脏,但是呃......它会完成工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多