Я пытаюсь работать с новым полем json, предлагаемым Postgres и Rails. Все, что я сделал до сих пор, - это сгенерировал этот каркас и отключил CSRF-токены по причинам тестирования:
rails generate scaffold Shipping name content:json
Моя цель - отправить такие данные:
curl -vX POST https://myserver.com/shipping -d '{"shipping": { "name": "test", "content" : ["test","hello"] }}' --header "Content-Type: application/json"
Это принимает имя имя, но не содержание. Есть ли правильный способ отформатировать контент или проблема не в этом?





Rails отфильтрует «скалярные» параметры, которые явно не разрешены. Готов поспорить, вы пробовали обычное строковое значение, и все работало нормально, но ничего не работает, когда вы отправляете массив или объект.
Чтобы все заработало, просто обновите исходный метод shipping_params в ShippingsController следующим образом:
def shipping_params
params.require(:shipping).permit(:name, content: {})
end
Кстати, взгляните на ActionController :: Parameters API docs. Я уверен, что со временем вы добавите в свою модель дополнительные атрибуты, и для них тоже нужно будет добавить ключи.
Для чего это стоит: вы можете встретить аналогичный метод permit! в справочной документации. Просто будьте осторожны, если вы а) используете атрибуты модели для принятия любых решений об авторизации и б) разрешаете людям, которым вы не доверяете, использовать ваш API. Последнее, что вы хотели бы сделать, это позволить кому-то установить что-то вроде столбца is_admin в значение true в пользовательской модели.
Спасибо! Я думал, что 3 раза возвращался к Rails, когда вам не нужно было заботиться о разрешениях. Я не могу принять json-массивы через банкомат, но {"data" => ["test", "ahoy"]} работает. Для меня этого сейчас достаточно :)