2016-03-23 7 views
-1

So importieren ich eine JSON-Datei, aber wenn ich gehe und das Objekt erstellen, wird die ID nicht generiert.Rails importieren JSON nicht erstellen Objekt in Postgresql

Hier ist meine Importmethode:

namespace :fieldfacts do 
    desc "Import Topics" 
    task :import_topics => :environment do 
    records = JSON.parse(File.read('public/topics.json')) 
    records.each do |record| 
     a = Topic.create 
     a.name = record['name'] 
     a.save 
    end 
    end 
end 

Hier ist der Fehler:

enter image description here

Und ich glaube nicht, es ohne eine ID gespeichert ist wird. Also, wie bekomme ich eine ID drin? Vielen Dank!

EDIT: Nach dem Thema Modell, muss ich eine user_id durch topics_owners setzen, aber wie mache ich das?

Thema Modell

has_many :topics_owners 
    has_many :users, -> { uniq }, through: :topics_owners 
    validates :name, presence: true 
    validates :user_ids, presence: {:message => "There must be an assigned Topic Owner to continue."} 
    validates :name, uniqueness: true 

-Controller

def topic_params 
     params.require(:topic).permit(:name, :description, :active, [keywords: [:id, :keyword]], [keywords_deleted: [:keyword]], :keywords_list, :keywords_list_deleted, 
     :organizations_list, :organizations_list_deleted, [organizations: [:id, :organization]], [organizations_deleted: [:organization]], 
     :social_groups_list, :social_groups_list_deleted, [social_groups: [:id, :social_group]], [social_groups_deleted: [:social_group]], 
     :feeds_list, :feeds_list_deleted, [feeds: [:id, :feed, :source_url]], [feeds_deleted: [:feed]], 
     {:articles_list => []}, :articles_list_deleted, :influencers, {:feeds_list => []}, 
     :articles_object, {:feeds_object => []}, :topic_api_id, :read_only, {user_ids: []}, {:influencers_ids => []}, 
     [:people_relevants => [:name, :id, :influencer_id, :topic_id]], 
     [influencers_adds: [:id, :weight, :influencers_add]], [:influencers_deleted => [:id]], [:influencers_list_deleted => [:id => []]], 
     [people: [:id, :person, :weight]], [people_deleted: [:person]], 
     [influencers_topics_attributes: [:influencer_id, :id, :_destroy]], :updater_id, :creator_id, 
     [influencer_attributes: [:name, :active]]) 
    end 

schema.rb

create_table "topics", force: true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "influencers_topics_count", default: 0,  null: false 
    t.text  "description" 
    t.integer "creator_id" 
    t.integer "updater_id" 
    t.boolean "read_only" 
    t.string "topic_api_id" 
    t.integer "people_relevants_count" 
    t.boolean "active",     default: false 
    t.datetime "activation_date" 
    end 

    add_index "topics", ["name"], name: "index_topics_on_name", using: :btree 

    create_table "topics_owners", force: true do |t| 
    t.integer "topic_id" 
    t.integer "user_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    add_index "topics_owners", ["topic_id"], name: "index_topics_owners_on_topic_id", using: :btree 
    add_index "topics_owners", ["user_id"], name: "index_topics_owners_on_user_id", using: :btree 
+1

Haben Sie eine Validierung am 'Topic' Modell? – vee

+0

Dies ist im Themenmodell. validiert: name, presence: true validiert: user_ids, presence: {: message => "Es muss ein zugewiesener Topic Owner vorhanden sein."} validiert: name, uniqueness: true –

+1

Die Validierungen sind die Probleme für Sie . Feuere die 'rails console' auf und probiere die Befehle aus. Sie werden genau sehen, was vor sich geht. Versuchen Sie 'a = Topic.new' anstelle von' a = Topic.create' zu ​​verwenden und 'a' aufzubauen, bevor Sie es speichern. – vee

Antwort

0

Sie wahrscheinlich a.save! statt a.save (und das gleiche mit create) verwenden sollten. Der Nicht-Bang gibt true oder false für Erfolg/Fehler zurück (die Sie ignorieren). Die Bang-Version löst beim Versagen eine Ausnahme aus. Das wird dich sofort wissen lassen, dass etwas nicht stimmt.

Auch wenn Sie wollen herausfinden, was das Problem ist, können Sie a.errors überprüfen, vor allem a.errors.full_messages (mit dem nicht-Knall save und create so haben Sie noch einen Verweis auf a). In diesem Fall ist das Problem, dass einige Ihrer Validierungen fehlschlagen (user_ids ist erforderlich, vielleicht auch eine nicht eindeutige name).

+0

Danke für den Tipp. Die Fehler sagten mir, ich brauche - validiert: user_ids, presence: {: message => "Es muss einen zugewiesenen Topic Owner geben, um fortzufahren."}. Gibt es eine Chance, dass du mir sagen könntest, wie ich das in meiner Rake-Aufgabe machen soll? –