2016-09-09 3 views
0

Ich versuche ein Objekt 'Besuch' von Json von AJAX gesendet zu erstellen. Hier ist das Modell:ActiveRecord Objekt mit Nullwerten erstellt

class Visit < ApplicationRecord 
    serialize :number, JSON 
    serialize :time_spent, JSON 
end 

und hier ist die Migrationsdatei:

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 

Ich habe eine Aktion Show genannt, die das folgende Skript enthält:

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

die Zeit zu messen ausgegeben Die Seite. Die Route für '/ log' ist:

get '/log', to: 'home_page#log', :defaults => { format: 'json' } 

und home_page # log ist:

def log 
    @visit = Visit.new(visit_params) 
    respond_to do |format| 
     if @visit.save 
      format.json { render json: @visit.to_json } 
     end 
    end 
end 

wo visit_params ist:

private 
def visit_params 
    params.require(:visit).permit(:number, :time_spent) 
end 

Wenn ich navigieren Sie zu/log, ich erhalte ein Fehler, der besagt, dass der Besuchsparameter fehlt oder leer ist.

EDIT:

Ich reparierte den Fehler in der Route, so dass es jetzt statt bekommen Post ist. In Terminal wird jedoch keine Nachricht eines gespeicherten Besuchs protokolliert.

Antwort

0

scheint, dass die Route Post sein sollte und sich nicht:

post '/log', to: 'home_page#log', :defaults => { format: 'json' } 
+0

Ich tat dies, aber keine Besuchsobjekte wurden gespeichert – genghiskhan

0

Stellen Sie sicher, dass JS gültig ist. Was ist die Ausgabe Ihrer Parameter in Ihren Controller? Auch sicher sein, enthalten die '=' in Ihrer ERB: <%= @number %>

Versuchen:

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

auch in der Migration, sollten Sie es als Text anstatt einer ganzen Zahl werden zu speichern.

Verwandte Themen