Я использую рельсы и создаю страницу, которая создает новых «людей» (people / new), но без использования форм. Используя javascript, я сканирую страницу с пользовательскими данными и в результате получаю объект javascript, который выглядит следующим образом:
obj = { name: "John", age: 30, city: "New York" };
Затем я отправляю запрос на публикацию с использованием javascript на контроллер:
fetch('/people', {
method: 'POST',
user_params: stringified
})
.then((resp) => resp.json())
.then(function (data) {
console.log(data)
})
.catch(function (error) {
console.log(error)
})
Проблема в том, что консоль в браузере показывает ошибку 500:
POST http://localhost:3000/reports 500 (Internal Server Error)
SyntaxError: Unexpected token < in JSON at position 0
Читая терминал, я получаю следующую ошибку, которая, я думаю, является источником проблемы:
NoMethodError (undefined method `[]' for nil:NilClass):
app/controllers/people_controller.rb:16:in `create'
Вот мой контроллер:
class PeopleController < ApplicationController
skip_before_action :verify_authenticity_token , only: [:create]
def index
@people = Person.all
end
def new
@person = Person.new
end
def create
Person.create(name: params[:user_params][:name], age: params[:user_params][:age], city: params[:user_params][:city])
end
end
Я попытался изменить синтаксис при создании в контроллере:
params[:user_params[:age]]
вместо
params[:user_params][:age]
Что дает мне ошибку
TypeError (no implicit conversion of Symbol into Integer)
Тем не менее, я очень долго смотрел в Интернете, что это изменение было неверным.
К вашему сведению, вот как выглядит переменная "stringified", когда входные данные пусты
{"name":"","age":"","city":""}
Я хочу, чтобы отправленная информация (user_params) сохранялась в базе данных.