Я отправляю POST-запрос в свой Rails API со следующими параметрами:
"user"=>{"first_name"=>"Gerry", "last_name"=>"Moen", "email"=>"gerrymoen@test.com", "addresses"=>[{"address_type"=>"home"}, {"address_line_1"=>"25609 Littel Island", "address_line_2"=>nil, "city"=>"Chill", "state"=>"CA", "zip"=>"12345", "address_type"=>"mailing"}]}
Однако, когда я проверяю параметры в своей конечной точке API, они выглядят так:
"user"=>{"first_name"=>"Gerry", "last_name"=>"Moen", "email"=>"gerrymoen@test.com", "addresses"=>[{"address_type"=>"home", "address_line_1"=>"25609 Littel Island", "address_line_2"=>nil, "city"=>"Chill", "state"=>"CA", "zip"=>"12345"}, {"address_type"=>"mailing"}]}
Как видите, поля почтового адреса отправляются как часть домашнего адреса. Теперь я знаю, что вложенные атрибуты должны быть назначены как addresses_attributes
. У меня есть это в моем методе user_params, чтобы справиться с этим.
params[:user][:addresses_attributes] = params.dig(:user).delete(:addresses)
params.require(:user).permit(....)
Но мой вопрос в том, что Rails делает за кулисами, чтобы переключать мои атрибуты адреса таким образом. Я не вижу ничего очевидного в моем коде, который это делает.
EDIT: Хорошо, нашел кое-что. Я распечатал неизмененные данные POST . Это выглядело так:
"user[first_name]=Gregorio&user[last_name]=Douglas&user[email]=gregoriodouglas%40test.com
&user[addresses][][address_type]=home&user[addresses][][address_line_1]=458%20Karlene%20Greens&user[addresses][][address_line_2]=&user[addresses][][city]=Superior&user[addresses][][state]=MT&user[addresses][][zip]=59872&user[addresses][][address_type]=mailing"
Я считаю, что причина объединения адресов заключалась в том, что они были отправлены как массив атрибутов ha sh. Я считаю, что для их правильного назначения мне нужно установить индекс в массиве. Или что-то в этом роде.