#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?