Результат разбора рельсов. Параллельный массив, отправленный через Curl Multipart POST. - PullRequest
0 голосов
/ 20 декабря 2018

Пожалуйста, объясните это или предоставьте более правильное решение.

class Store < ApplicationRecord
  has_and_belongs_to_many :books
end

class Book < ApplicationRecord
  has_and_belongs_to_many :stores
end

У меня есть несколько книг в базе данных.Я хотел бы создать новый магазин с несколькими книгами.

Следующие несколько команд curl приводят к тому, что Rails анализирует пустой массив для params [book_ids]:

curl -F "author[book_ids[]]=[1,2]" -F "author[description]=some description" localhost:3000/authors.multipart
    Started POST "/authors.multipart" for 127.0.0.1 at ...
    Processing by AuthorsController#create as MULTIPART
    Parameters: {"author"=>{"gesture_ids"=>[], "description"=>"some description", @headers ...

curl -F "author[book_ids[]]=\"[1,2]\"" -F "author[description]=some description" localhost:3000/authors.multipart
    Started POST "/authors.multipart" for 127.0.0.1 at ...
    Processing by AuthorsController#create as MULTIPART
    Parameters: {"author"=>{"gesture_ids"=>[], "description"=>"some description", @headers ...

curl -F "author[book_ids[]]=1" -F "author[book_ids[]]=2" -F "author[description]=some description" localhost:3000/authors.multipart
    Started POST "/authors.multipart" for 127.0.0.1 at ...
    Processing by AuthorsController#create as MULTIPART
    Parameters: {"author"=>{"gesture_ids"=>[], "description"=>"some description", @headers ...

Носледующая команда добивается цели:

curl -F "author[book_ids[]=1" -F "author[book_ids[]=2" -F "author[description]=some description" localhost:3000/authors.multipart
    Started POST "/authors.multipart" for 127.0.0.1 at ...
    Processing by AuthorsController#create as MULTIPART
    Parameters: {"author"=>{"gesture_ids"=>["1","2"], "description"=>"some description", @headers ...

Как видите, команда пропускает правую скобку в нескольких местах, но она работает.Проверяя след, Керл действительно отправляет следующее для первой книги.

0000: HTTP/1.1 100 Continue
=> Send data, 502 bytes (0x1f6)
0000: --------------------------538dd4bc2333141c
002c: Content-Disposition: form-data; name="store[book_ids[]"
0068: 
006a: 1
006f: --------------------------538dd4bc2333141c

1 Ответ

0 голосов
/ 20 декабря 2018

Правильный синтаксис author[book_ids][]=1

Синтаксис в этом случае wrapper[key] = value (как у вас для описания), поэтому для Array мы утверждаем, что это Array значений wrapper[key][], то = добавляет значение к Array.

Запись сейчас author[book_ids[]]=[1,2] будет технически проанализирован как author: {book_ids: []} = [1,2], что явно неверно, и анализатор просто игнорирует присвоение.

...