Невозможно выполнить «обновления» с использованием динамической c вложенной формы в Rails (пользователь может добавлять дополнительные элементы формы, формы используют две модели) - PullRequest
0 голосов
/ 17 марта 2020

Я следовал следующему руководству до 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">&times;</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 

Буду благодарен за любую помощь в решении этой проблемы.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...