使用空值

时间:2016-09-09 15:40:06

标签: ruby-on-rails json ajax activerecord

我正在尝试从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时,我收到一条错误消息,指出访问参数丢失或为空。

编辑:

我修正了路线中的错误,现在它发布而不是获取。但是,终端中不会记录任何保存访问的消息。

2 个答案:

答案 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} }
    })
 });
}

同样在迁移中,您应该将其保存为文本而不是整数。