Вложенная форма «многие ко многим» с использованием кокона Rails 6

Я пытаюсь сделать возможным добавление несколькихcropsкspray_programчерезprogram_cropsво вложенной форме с использованием кокона. Я могу добавить один, но кнопка link_to_add_association просто добавляет # к URL-адресу. Я добавлю биты кода, которые, я думаю, будут актуальными, дайте мне знать, если есть что-то еще...

      nested form in spray_program form
<div id="programCrops">
     <%= form.fields_for :program_crops do |program_crop_form| %>
      <%= render 'program_crop_fields', f: program_crop_form%>
    <% end %>
    </div>
    <div class="links">
      <%= link_to_add_association "Add crop", form, :program_crops %>
    </div>

_program_crop_fields.html.erb

      <div class="nested-fields">
  <div class="field">
    <%= f.label :name %>
    <%= f.collection_select :crop_id, Crop.all, :id, :name %>
    </div>
    <%= link_to_remove_association "Remove crop", f %>
</div>

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

       def new
    @spray_program = SprayProgram.new
    @spray_program.build_program_sprayer
    @spray_program.program_crops.build

  end

модель

      class ProgramCrop < ApplicationRecord
  belongs_to :crop
  belongs_to :spray_program inverse_of: :program_crops

  validates :spray_program, uniqueness: { scope: :crop }
end

В консоль не выводятся ошибки JavaScript. Раскрывающийся список отображается правильно и создает связь «многие ко многим», как и ожидалось. Извините, если пропустил что-то важное, уже поздно!

--Дополнительные модели

      class Product < ApplicationRecord
  belongs_to :farm
  has_one :user, through: :farm, dependent: :destroy
  has_many :program_doses, dependent: :destroy
end
```ruby
class SprayProgram < ApplicationRecord

  has_one :program_sprayer, dependent: :destroy
  has_many :program_crops, inverse_of: :spray_program, dependent: :destroy
 

  has_one :sprayer, through: :program_sprayer
  has_many :crops, through: :program_crops


  accepts_nested_attributes_for :program_sprayer
  accepts_nested_attributes_for :program_crops, reject_if: :all_blank, allow_destroy: true

  # validates_associated :program_sprayer
end

полученные параметры выглядят так

      
    {"authenticity_token"=>"[FILTERED]",
     "spray_program"=>
      {"date(1i)"=>"2022",
       "date(2i)"=>"8",
       "date(3i)"=>"1",
       "farm_id"=>"1",
       "program_sprayer_attributes"=>{"sprayer_id"=>"1", "litres_per_min"=>"4", "speed"=>"7"},
       "program_crops_attributes"=>{"0"=>{"crop_id"=>"8", "_destroy"=>"false"}}},
     "commit"=>"Create Spray program"}

1 ответ

В конце концов, у меня это заработало, я попытался проверить, загружается ли jquery, и это не так, кокон - нет. Я думаю, что что-то было не так в моих настройках webpacker, после запускаЯ столкнулся с ошибкой отсутствия записи в веб-пакете, поэтому последовал этому руководству, после чего мой локальный сервер снова заработал.

В этот момент я заметил, что произошла ошибка при поиске модуля кокона в приложении js после того, как веб-пакет скомпилирован для моего локального сервера (я как-то испортил установку или импорт).

В конце концов, я использовал эту версию coccoon для vanilla js, следуя инструкциям, и теперь она работает хорошо.

Другие вопросы по тегам