Я наблюдаем странное поведение в Rails, при отправке запроса на запись со следующим телом: Как правильно отправить запрос на проверку JSON Rails?
Если вы отметите это Hash (преобразуется в формат JSON при отправке). Но как ни странно, когда читается Params в контроллере, распознается как это:
Если вам тщательно проверить, атрибуты :first_name
и :email
перемещаются к предыдущему элементу в массиве.
Я думал, что если у вас есть массив с определенными атрибутами для первого элемента, но некоторые разные атрибуты для следующих элементов, массив будет соблюдать позиции, для которых установлены атрибуты.
Я знаю, что, скорее всего, ответ будет «просто поставить nil
или пустое значение этих атрибутов на первый элемент массива», но я больше заинтересован в причине того, почему это происходит.
спасибо.
UPDATE
Благодаря вопрос, я реплицируюсь сценарий сформировать браузер (я изначально делал запрос от test
функции рельсов), и проверкой сети из браузера, это то, что посылается :
{
"name": "un nombre",
"team_members": [
{
"user_id": 1,
"team_member_role_id": 4
},
{
"email": "[email protected]",
"first_name": "Cap America",
"team_member_role_id": 4,
"admin": true
},
{
"email": "[email protected]",
"first_name": "Bruce Banner",
"team_member_role_id": 1,
"admin": false
},
{
"email": "[email protected]",
"first_name": "Tony Stark",
"team_member_role_id": 1,
"admin": false
},
{
"email": "[email protected]",
"first_name": "Thor Hijo de Odín",
"team_member_role_id": 2,
"admin": false
}
]
}
И это работает. Поэтому я сосредоточился на том, как я отправлял информацию из тестовой среды, это фактический код:
team = {
:name => 'un nombre',
:team_members => [
{
:user_id => 1,
:team_member_role_id => TeamMemberRole.role_communicator_id
},
{
:email => '[email protected]',
:first_name => 'Cap America',
:team_member_role_id => TeamMemberRole.role_communicator_id,
:admin => true
},
{
:email => '[email protected]',
:first_name => 'Bruce Banner',
:team_member_role_id => TeamMemberRole.role_visionary_id,
:admin => false
},
{
:email => '[email protected]',
:first_name => 'Tony Stark',
:team_member_role_id => TeamMemberRole.role_visionary_id,
:admin => false
},
{
:email => '[email protected]',
:first_name => 'Thor Hijo de Odín',
:team_member_role_id => TeamMemberRole.role_developer_id,
:admin => false
}
]
}
post create_team_path, :team => team, :format => :json
А что читается в контроллере по request.raw
, это то, что получает (с помощью отладчика):
team[name]=un+nombre&
team[team_members][][user_id]=1&
team[team_members][][team_member_role_id]=4&
team[team_members][][email]=cpamerica%40avengers.com&
team[team_members][][first_name]=Cap+America&
team[team_members][][team_member_role_id]=4&
team[team_members][][admin]=true&
team[team_members][][email]=hulk%40avenrgers.com&
team[team_members][][first_name]=Bruce+Banner&
team[team_members][][team_member_role_id]=1&
team[team_members][][admin]=false&
team[team_members][][email]=ironman%40avengers.com&
team[team_members][][first_name]=Tony+Stark&
team[team_members][][team_member_role_id]=1&
team[team_members][][admin]=false&
team[team_members][][email]=thor%40avengers.com&
team[team_members][][first_name]=Thor+Hijo+de+Od%C3%ADn&
team[team_members][][team_member_role_id]=2&
team[team_members][][admin]=false&
format=json
Любая идея о том, почему индекс каждого team_member
отсутствует? Я посылаю массив неправильно?
вы проверили, что на самом деле отправляется на проводе (например, сеть инспектор использовать Хрома)? –
@FrederickCheung Я делаю запрос, используя тестовую среду Rails, а не браузер. Поэтому я написал 'post create_team_path, {: format =>: json,: team => team}' где 'команда' - это хэш. – unmultimedio
@FrederickПодробнее об обновлении нового подхода к вопросу – unmultimedio