rails вложенные атрибуты rails record_not_found при обновлении

#ruby-on-rails #ruby #nested-attributes

#ruby-on-rails #ruby #вложенные атрибуты

Вопрос:

У меня есть 2 модели, такие как:

 class Customer < ActiveRecord::Base
 has_many :passengers
 accepts_nested_attributes_for :passengers, allow_destroy: true
end

class Passenger < ActiveRecord::Base
 belongs_to :customer
end
  

customer_params содержат :

 :name,...
:passengers_attributes: [:id, :name, :_destroy]
  

и при переходе passengers_attributes к обновлению customer (id = 1), например

 {
  "passengers_attributes": [
    {
      "name": "abc",
      "id": 5
    }
  ]
}
  

С пассажиром "abc" — новая запись

Когда я запускаю customer.update_attributes!(customer_params) , возникает ошибка ActiveRecord::RecordNotFound: Couldn't find Passenger with ID=5 for Customer with ID=1

Вам знакома эта ошибка? мне нужна ваша помощь. Спасибо

Комментарии:

1. Что такое customer ? Эта ошибка означает, что вы делаете Customer.find(5) , и эта запись не может быть найдена. Как вам удастся извлечь customer объект, ответит на ваш вопрос, поскольку кажется, что вы пытаетесь найти несуществующую запись.

2. Я думаю, что ошибка заключается в том, что пассажир с идентификатором 5 не может быть найден. (т.е. customer.passengers.find(5) вызовет ошибку RecordNotFound. Можете ли вы показать нам представление формы?

3. когда я меняю информацию о пассажирах для клиента на новую запись passeger, как я упоминал выше, у нас нет пассажира с id = 5 , это вызвало ошибку. Поэтому, если я хочу создать нового пассажира для этого клиента, я должен передать параметр passenger без идентификатора, например: { «passengers_attributes»: [ { «name»: «abc», } ] } Спасибо всем

4. @TaiTriVo Ты понял это? Я борюсь с той же проблемой 🙂

Ответ №1:

Нашел вашу ошибку здесь

 {
  "passengers_attributes": [
    {
      "name": "abc",
      "id": 5
    }
  ]
}
  

Здесь вы не можете отправить идентификатор в параметрах. Идентификатор не может быть изменен или вы можете вставить его вручную.

Здесь у вашего клиента нет пассажира с идентификатором «5». вот почему вы получаете эту ошибку.

Комментарии:

1. атрибуты passengers_attributes являются вложенными атрибутами, поэтому для обновления требуется идентификатор.

2. У вас есть запись с идентификатором 5?