0

我正在尝试在 company#show 页面上使用嵌套表单向公司添加地址。我成功添加了新地址,但是当页面重新加载时,新地址的表单区域将填充现有记录。

我怎样才能只显示空的构建记录而不显示现有记录?

这是表单区域中显示的内容...

在此处输入图像描述

这就是我所期待的……

在此处输入图像描述

这是公司#show页面...

= form_for @company do |f|
  = f.fields_for :addresses do |t|
    .form-inline
      .col-md-2
        = t.text_field :street1, class: 'form-control form-control-sm', placeholder: 'Street 1', id: 'street1'
      .col-md-2
        = t.text_field :street2, class: 'form-control form-control-sm', placeholder: 'Street 2', id: 'street2'
      .col-md-2
        = t.text_field :apt_other, class: 'form-control form-control-sm', placeholder: 'Suite #', id: 'apt_other'
      .col-md-2
        = t.text_field :city, class: 'form-control form-control-sm', placeholder: 'City', id: 'city'
      .col-md-1
        = t.collection_select :state_id, @states, :id, :state_abbr, {:include_blank => 'State'} , {:class => 'form-control form-control-sm'}
      .col-md-2
        = t.text_field :zip, class: 'form-control form-control-sm', placeholder: 'Zip', id: 'zip'
    .form-inline
      .col-md-2
        = t.text_field :phone, class: 'form-control form-control-sm', placeholder: 'Phone', id: 'phone'
      .col-md-2
        = t.text_field :fax, class: 'form-control form-control-sm', placeholder: 'Fax', id: 'fax'
  .form-group-row
    .text-center
      .btn-group{role: 'group'}
        = f.submit 'Save', class: 'btn btn-outline-success btn-sm', style: 'margin-bottom: .5em;'
4

2 回答 2

0

如果您希望将其分开,则需要添加检查或条件以仅在 fields_for 中显示非持久地址,或者您需要在控制器中初始化一个新地址并仅显示该地址的表单。例如:

#companies_controller.rb
...
def show
  @company = Company.find(params[:id])
  @new_address = @company.addresses.build()
end
...

fields_for :addresses然后你应该创建一个而不是显示form_for @new_address

我认为您也可以@new_address直接将其传递给fields_forlike :

= f.fields_for :addresses, @new_address do |t|

我还没有测试过这个,你可能需要把它写成一个数组[@new_address]。这基本上所做的是它强制将特定的对象集合用于嵌套的fields_for. 您还可以阅读fields_for 上的文档。

于 2018-08-20T10:07:07.580 回答
0

我会回答它以关闭线程。

这条线是错误的。

= f.fields_for :addresses do |t|

这就是我改成的。

= f.fields_for :addresses, Address.new do |t|
于 2018-08-21T18:19:24.630 回答