如何在没有按键的情况下在数据库中创建记录

时间:2019-01-14 12:04:42

标签: javascript ruby-on-rails ajax

我正在使用Rails,并且正在构建一个页面来创建新的“人员”(人员/新人员)。 使用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: app / assets / 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 :(得分:1)

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