accepts_nested_attributes_fields не отображается для таблицы соединений - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующие таблицы

class Region < ActiveRecord::Base
  has_many :companies, through: :companies_regions
  has_many :companies_regions, :dependent => :destroy
end

class Company < ActiveRecord::Base
  has_many :regions, through: :companies_regions
  has_many :product_type, dependent: :destroy
  has_many :companies_regions, :dependent => :destroy

  accepts_nested_attributes_for :companies_regions, :allow_destroy => true
end

class CompaniesRegion < ActiveRecord::Base
  belongs_to :company
  belongs_to :region
end

Я хочу создать новую компанию и хочу добавить новый регион в соответствии с таблицей CompaniesRegion.

form.html.erb

<%= simple_form_for(['admin', @company]) do |f| %>
  <%= f.error_notification %>
  <div class="form-group">
    <%= f.input :name %>
  </div>
  <div>
  <div class="row">
    <div class="col-md-12">
      <h4>Basic Coverages</h4>
      <div class="row form-group">
        <label class="col-md-1">#</label>
        <label class="col-md-3">Coverage</label>
        <label class="col-md-1">Description</label>
      </div>
      <div>
        <%= f.simple_fields_for :companies_regions do |company_region| %>
          <%= render 'company_region', f: company_region  %>
        <% end %>
        <%= link_to_add_association 'New Region', f, :companies_regions, partial: 'company_region' %>
      </div>
    </div>
  </div>
  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

_company_region.html.erb

<div class="nested-fields form-group row">
  <div class="col-md-1"></div>
  <div class="col-md-3">
    <%#= f.select :region_id, class: 'form-control', placeholder: 'Region' %>
    <%= f.input_field :region_id, collection: ['Asia', 'America'], class: 'form-control', prompt: 'Please Select' %>
  </div>
  <div class="col-md-1">
    <%= link_to_remove_association(f, title: 'Remove') do  %>
      <span class="glyphicon glyphicon-remove"></span>
    <% end %>
  </div>
</div>

Проблема здесь в том, что когда я нажимаю ссылку «Новый регион», я ожидаю, что она отобразит детали в _company_region.html.erb, но, к сожалению, это не так.

Ничего не показывает. Он не отображает никаких данных. Это, однако, обновляет страницу, что абсурдно.

Не знаю, если это потому, что моя таблица является таблицей соединений, следовательно, проблема, или если я что-то упускаю, но по документации, это должно быть нормально и должно работать.

Любая помощь высоко ценится

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Ваш код выглядит нормально. Поведение, которое вы описываете, указывает на то, что код cocoon.js не включен / загружен правильно? Вы

  • добавить require 'cocoon' в application.js?
  • Вы включили application.js в свой HTML?
0 голосов
/ 05 мая 2018

Это очень распространенное заблуждение, что вам нужно использовать вложенные атрибуты для установки ассоциаций. Вы не Rails генерирует установщик regions_ids= для ассоциации, который можно подключить с помощью флажков или тега select.

Все, что вам действительно нужно с SimpleForm, это:

<%= f.association :regions %>

См. Документы для ActionView :: Helpers :: FormOptionsHelper и ассоциаций в SimpleForm для получения дополнительной информации о том, как это работает.

<%= simple_form_for(['admin', @company]) do |f| %>
  <%= f.error_notification %>
  <div class="form-group">
    <%= f.input :name %>
  </div>
  <div>
  <div class="row">
    <div class="col-md-12">
      <h4>Basic Coverages</h4>
      <div class="row form-group">
        <label class="col-md-1">#</label>
        <label class="col-md-3">Coverage</label>
        <label class="col-md-1">Description</label>
      </div>
      <div>
        <%= f.association :regions %>
      </div>
    </div>
  </div>
  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

Единственная причина, по которой вам нужно использовать вложенные атрибуты, заключается в том, что пользователь должен иметь возможность создавать области в одном запросе. Но обычно лучше использовать ajax для обработки этих случаев.

...