Как создать записи в базе данных без формы при нажатии клавиши - PullRequest
0 голосов
/ 14 января 2019

Я использую Rails и создаю страницу, которая создает новых «людей» (people / new). Используя javascript, я сканирую страницу с пользовательскими данными и в результате получаю объект javascript, который выглядит следующим образом:

obj = { name: "John", age: 30, city: "New York" };

Я хочу добавить прослушиватель событий (нажатие клавиши q), который сохраняет этот хэш в базе данных, которая выглядит следующим образом:

  create_table "people", force: :cascade do |t|
    t.string "name"
    t.integer "age"
    t.string "city"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

Несмотря на то, что у меня есть входные данные, которые я сканирую, НЕТ формы.

Я знаю, как JSON.stringify, и я знаю, как работают eventListeners, но я не уверен, как можно отправить этот строковый объект из javascript в код ruby, который сохраняет его в базе данных.

Вот Javascript, который я сделал до сих пор: приложение / активы / JavaScript / testing.js

addEventListener('keyup', event => {
    if (event.key === "q") {
        var array = []
        var inputs = document.querySelectorAll("input")
        inputs.forEach ((input) => {
            array.push(input.value)
        })
        var name = array[0]
        var age = array[1]
        var city = array[2]

        var hash = {}
        hash["name"]= name
        hash["age"]= age
        hash["city"]= city
        var stringified = JSON.stringify(hash)
    }
} )

А вот как выглядит мой контроллер:

class PeopleController < ApplicationController

  def index
    @people = Person.all
  end

  def new
    @person = Person.new
  end

  def create
    Person.create(person_params)
  end

  private

  def person_params
    params.require(:person).permit(:name, :age, :city)
  end
end

Я ожидаю, что при нажатии клавиши «q» все, что присутствует во входах, сохраняется в базе данных

1 Ответ

0 голосов
/ 14 января 2019
addEventListener('keyup', event => {
    if (event.key === "q") {
        var array = []
        var inputs = document.querySelectorAll("input")
        inputs.forEach ((input) => {
            array.push(input.value)
        })
        var name = array[0]
        var age = array[1]
        var city = array[2]

        var hash = {}
        hash["name"]= name
        hash["age"]= age
        hash["city"]= city
        var stringified = JSON.stringify(hash)

        // Using Javascript
        fetch('/people', {
           method: 'POST',
           user_params: stringified
        })
        .then((resp) => resp.json())
        .then(function (data) {
          console.log(data)
        })
        .catch(function (error) {
           console.log(error)
        })                    
    }
} )

peoples_controller.rb

  def create
    Person.create(name: params[:user_params][:name], age: params[:user_params][:name], city: params[:user_params][:city])
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...