ActiveRecord :: AssociationTypeMismatch, который является экземпляром ошибки ActiveSupport :: HashWithIndifferentAccess - PullRequest
0 голосов
/ 30 апреля 2020

Я получаю эту ошибку:

ActiveRecord::AssociationTypeMismatch (Agent(#70150138059920) expected, got {"id"=>1, "name"=>"Sebastien", "phone_number"=>"345123900"} which is an instance of ActiveSupport::HashWithIndifferentAccess(#70150038272680)):

Я не понял, почему.

agent.rb:

belongs_to :management

management.rb:

has_one :agent

accepts_nested_attributes_for :agent, reject_if: proc { |attr| attr['name'].blank? && attributes['phone_number'].blank? }, allow_destroy: true

edit. vue:

<template>
  <v-card class="mb-12>
    <v-form :model='management' ref="managementForm">
     <v-text-field
        v-model='management.agent.name'
        name="name">
     </v-text-field>
     <v-text-field
        v-model='management.agent.phone_number'
        name="number">
     </v-text-field>
     <v-btn @click.prevent='submit'>Save</v-btn>
    </v-form>
   </v-card>
 </template>

<script>
  export default {
    data() {
      return {
      management {
       agent: {
        name: ""
        phone_number: ""
       }
      }
    }
   methods: {
     submit() {
        if (this.$refs.managementForm.validate()) {

            this.$axios.put('/management.json', { management: this.management })
            .then(response => {
            });
        }
        else {
          this.$axios.post('/managements.json', { management: this.management })
            .then(response => {
            });
        }
    }
  }

management_controller.rb:

def update
  @management = current_management
  render json: { errors: @management.errors.full_messages }, status: :unprocessable_entity unless current_user.management.update_attributes(management_params)
end

private

def company_params
  params.require(:company).permit(agent: %i(id name phone_number))
end

1 Ответ

0 голосов
/ 30 апреля 2020

Я сделал ошибку в management_params. Я разрешил agent, но это должно было быть agent_attributes, потому что при accepts_nested_attributes_for он ищет атрибуты с именем модели:

def management_params
  params.require(:company).permit(agent_attributes: %i(id name phone_number))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...