2016-07-01 5 views
1

Ich möchte die Daten von der API speichern, aber nur einmal. Derzeit speichere ich Daten jedes Mal, wenn ich meine Seite neu lade, also habe ich denselben Eintrag viele Male ... Ich möchte nur neue speichern, wenn sie es sind. Wenn ich versuche, Validierung hinzufügen, dies zu vermeiden ich diesen Fehler:Daten von api speichern (aber nur einmal)

Validierung fehlgeschlagen: Das ist mein Code Datum bereits getroffen wurde, hat URL bereits

ergriffen:

Schema:

create_table "conferences", force: :cascade do |t| 
    t.string "title",  null: false 
    t.string "url" 
    t.date  "date",  null: false 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
end 

conference.rb:

class Conference < ActiveRecord::Base 
validates_presence_of :title, :date 
validates :date, :url, :uniqueness => true 

def self.save_conference_from_api 
    response = ApiMeetup.new.events('parisrb') 
    api_data = JSON.parse(response.body) 
    parisrb = [] 
    api_data.each do |event| 
    if event["name"] == "ParisRb.new(premier: :mardi, pour: :talks)" 
     parisrb << event 
    end 
    end 
    parisrb.map do |line| 
    conference = Conference.new 
    conference.title = line['name'] 
    conference.date = line['time'] 
    conference.url = line['link'] 
    conference.save! 
    end 
    Conference.all 
end 
end 

conferences_controller:

def index 
    @conferences = Conference.save_conference_from_api 
end 

Index:

%ul 
    - @conferences.each do |conf| 
    %li 
     %span 
     = conf.date 
+0

Ihre Validierungen funktionieren gut, was genau ist das Problem? Sie verhindern, dass die Datensätze erstellt und Ihnen mitgeteilt werden. – jamesc

+0

Ja, die Validierung funktioniert, aber ich kann dann nicht auf die Website zugreifen. Also wie kann ich sagen "ok ist es so nichts zu tun und gehen Sie auf die nächste, dann zeigen Sie die Seite" – Orsay

Antwort

1

Nur es nicht speichern, wenn es nicht gültig ist

conference.save! 

wird

if conference.valid? conference.save! 

Weil sparen! löst einen ActiveRecordValidation Fehler aus, dann könntest du das stattdessen fangen und du brauchst nicht wirklich! für einen gültigen Datensatz auf der Speichermethode, wenn Sie also vor dem Speichern

werden Überprüfung könnten Sie

begin 
    conference.save! 
rescue ActiveRecord::RecordInvalid => invalid 
    # Do nothing 
end 

haben oder wirklich sollten Sie

if conference.valid? conference.save 

haben Wenn alle Datensätze in einem Array sind dann HTML-Vorlage kann durchlaufen das Array und präsentiert die Fehler für jeden, wenn Sie wollten.

+0

Es funktioniert gut, danke! – Orsay

+0

@Orsay Sie sind willkommen. Sie haben keine schnelle Antwort bekommen, weil Ihre Frage sehr unklar war. Wenn du viel mehr Zeit damit verbringst, die Dinge durchzudenken, bevor du deine Frage postest, bekommst du bessere/schnellere Antworten. Freut mich, Ihnen behilflich zu sein – jamesc

+0

Ja, ich versuche immer, klarere Fragen zu stellen :) Danke für Hilfe und Rat! – Orsay

Verwandte Themen