Вложенная форма «многие ко многим» с использованием кокона 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, следуя инструкциям, и теперь она работает хорошо.