我正在尝试从AJAX发送的json创建一个'visit'对象。这是模型:
class Visit < ApplicationRecord
serialize :number, JSON
serialize :time_spent, JSON
end
这是迁移文件:
class CreateVisits < ActiveRecord::Migration[5.0]
def change
create_table :visits do |t|
t.integer :number
t.integer :time_spent
t.timestamps
end
end
end
我有一个名为show的动作,其中包含以下脚本:
var start;
$(document).ready(function() {
start = Date.getTime();
$(window).unload(function() {
end = Date.getTime;
$.ajax({
type: 'POST',
dataType: 'json',
url: "/log",
data: { visit: { 'number': <% @number %>,'time_spent': end - start} }
})
});
}
衡量在网页上花费的时间。 '/ log'的路线是:
get '/log', to: 'home_page#log', :defaults => { format: 'json' }
和home_page #log是:
def log
@visit = Visit.new(visit_params)
respond_to do |format|
if @visit.save
format.json { render json: @visit.to_json }
end
end
end
其中visit_params是:
private
def visit_params
params.require(:visit).permit(:number, :time_spent)
end
当我导航到/ log时,我收到一条错误消息,指出访问参数丢失或为空。
编辑:
我修正了路线中的错误,现在它发布而不是获取。但是,终端中不会记录任何保存访问的消息。
答案 0 :(得分:0)
似乎该路线应该发布而不是:
post '/log', to: 'home_page#log', :defaults => { format: 'json' }
答案 1 :(得分:0)
确保您的JS有效。进入控制器的params输出是什么?另外,请务必在您的ERB中加入“=”:<%= @number %>
尝试:
var start;
var end;
$(document).ready(function() {
start = new Date().getTime();
$(window).unload(function() {
end = new Date().getTime();
$.ajax({
type: 'POST',
dataType: 'json',
url: "/log",
data: { visit: { 'number': <%= @number %>,'time_spent': end - start} }
})
});
}
同样在迁移中,您应该将其保存为文本而不是整数。