javascript - 如何在按键时在没有表单的情况下在数据库中创建记录

标签 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: 应用程序/ 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)
    }
} )

这是我的 Controller 的样子:

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”键时,输入中存在的任何内容都会保存到数据库中

最佳答案

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

关于javascript - 如何在按键时在没有表单的情况下在数据库中创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54181214/

相关文章:

javascript - 获取 Mindmup 的可编辑表中的整行

javascript - 无法使用 Fabric JS 取消分组

javascript - jquery .submit 第一次不会被调用

ruby-on-rails - 使用 will_paginate gem 在 Rails 3.2.3 中调用 Ajax

ajax - 尝试将 Joomla 版本 3.5.1 升级到 3.6.4 时出现  "ERROR: AJAX Loading Error: Forbidden"错误

javascript - ng-repeat 内部的动态 ng-switch

javascript - 当我向表中添加更多行时 OnClick 它以错误的方式显示

mysql - Docker + Rails + MySQL =忽略database.yml中的环境变量

ruby-on-rails - 带有 Turbolinks 的 Googletagmanager

javascript - else if 在ajax登录表单中不起作用