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