【问题标题】:Rails nested form on show page显示页面上的 Rails 嵌套表单
【发布时间】:2018-08-16 21:42:03
【问题描述】:

我正在尝试在 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;'

【问题讨论】:

    标签: ruby-on-rails-5 nested-forms


    【解决方案1】:

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

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

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

    我认为您也可以像这样将@new_address 直接传递给fields_for

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

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

    【讨论】:

      【解决方案2】:

      我会回答它以关闭线程。

      这行写错了。

      = f.fields_for :addresses do |t|
      

      这是我改成的。

      = f.fields_for :addresses, Address.new do |t|
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多