Я следовал следующему руководству до https://ericlondon.com/2012/07/18/creating-a-ruby-on-rails-admin-form-to-bulk-update-multiple-models.html, чтобы выяснить, как выполнять массовые обновления с динамическими c формами. Однако, когда я пытаюсь сделать вложенную версию формы, я получаю эту ошибку:
ActiveRecord :: AssociationTypeMismatch в GroupsController # bulk_update
Ожидается карта (# 69941572448980), получено ["4", {"card_tile" => "Dr. Pepper"}], который является экземпляром массива (# 46969659365040)
Вот параметры, которые он сообщает как отправленные:
* * 1013 Параметры:
* * {1016 "authenticity_token" => "LrE4zVBn6Ba80gwNyg5DPIc + 1fXxsNBNBbmzkgbyrOkRrz4 + MqHWdHHBUAv4qhUUDiS8MxRcPQZeSCn39Eobaw ==", "группы" => { "2" => { "group_title" =>» dfas "," cards "=> {" 4 "=> {" card_tile "=>" Dr. Pepper "}," 5 "=> {" card_tile "=>" Pepsi "}," 6 "=> {" card_tile "=>" Coke "}}},
" 3 "=> {" group_title "=>" poplklklk "," cards "=> {" 7 "=> {" card_tile "=>" Dr. Pepper "}," 8 "=> {" card_tile "=>" Кокс "}," 9 "=> {" card_tile "=>" Pepsi "}}}}," commit "=>" Сохранить изменения "," метод "=>" put "}
Похоже, я не передаю параметры в правильной форме, чтобы иметь возможность выполнить обновление.
Вот мои две модели:
Модель группы
class Group < ApplicationRecord
belongs_to :picture
has_many :cards, dependent: :destroy
accepts_nested_attributes_for :cards, :allow_destroy => true
require 'baidu/oauth'
require 'google/cloud/vision'
require 'json'
require 'rest-client'
require 'image_processing'
require 'mini_magick'
require 'tempfile'
validates :group_title, presence: true, length: { maximum: 40 }
end
Контроллер карт
class Card < ApplicationRecord
belongs_to :group
require 'baidu/oauth'
require 'google/cloud/vision'
require 'json'
require 'rest-client'
require 'image_processing'
require 'mini_magick'
validates :card_tile, presence: true, length: { maximum: 40 }
end
Вот форма:
<%= form_tag bulk_update_path :method => :put do %>
<div class="panel-box">
<div id="panel-body2">
<% @picture.groups.each do |group| %>
<%= fields_for "groups[]", group do |f| %>
<div class="card_holder" >
<div class="panel-box">
<%= f.text_field :group_title, id: 'group1' %>
<div id="button_box">
<button type="button" class="add_card"> + </button>
</div>
</div>
<table class="cards">
<% group.cards.each do |card| %>
<%= f.fields_for "cards[]", card do |ff| %>
<tr>
<div class="card">
<button type="button" class="close" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<img id=card_img src= "<%= card.card_image %>" width= "100%">
<div class="container-card">
<%= ff.text_field :card_tile, id: 'group2' %>
</div>
</div>
<tr>
<% end %>
<% end %>
</table>
</div>
<% end %>
<% end %>
</div>
</div>
<div class= "button_holder">
<div class = "botton_box">
<%= submit_tag "Save changes", class: "btn btn-primary" %>
<button type="button" class="add_group btn btn-primary"> Add Group </button>
</div>
</div>
<% end %>
И вот мой контроллер для этого обновления:
def bulk_update
result_group = Group.update(params[:groups].keys, params[:groups].values).reject { |p| p.errors.empty? }
if result_group.empty?
flash[:success] = "groups updated"
redirect_to request.referrer
else
flash[:error] = "Error"
redirect_to request.referrer
end
end
private
def group_params
params.require(:group).permit(:group_title, :group_image, cards_attributes => [:id, :card_tile])
end
end
Буду благодарен за любую помощь в решении этой проблемы.
С уважением