Hey alle, ich habe Probleme mit der Validierung, an denen ich in den letzten Tagen gearbeitet habe, ohne Glück. Ich habe ein Modell, bei dem der Benutzer eine URL eingeben muss. Ich habe das in meinem Modell mit den folgenden getan:Rails 3 - Form Validation - Logik zu einem Callback oder Observer?
validates :url, :presence => true
Wenn ein Benutzer ihre Form vorträgt, ich ihre URL nehmen und öffnen Sie sie mit Nokogiri grundlegende Dinge wie die Webseite Titel zu ziehen. Ich mache das gerade mit meiner Create-Methode im Controller. Code sieht so aus:
def create
require 'open-uri'
@page = Page.new(params[:page])
doc = Nokogiri::HTML(open(@page.url))
Das Problem, das ich in laufen, ist, dass, wenn der Benutzer ein leeres Formular eingibt, wird Nokogiri Fehler anzeigt, wie es läuft, obwohl ich versucht habe, das Formular zu validieren.
Meine Frage ist, sollte ich diese Art von Logik zu einem Rückruf oder einem Beobachter bewegen? Ich bin ziemlich neu bei Schienen, aber würde es einen Weg für mich geben, mit meinen Daten/Instanzvariablen von einem Callback/Beobachter zu arbeiten? Ich habe es versäumt, einfach @page zu verwenden, habe mich aber gefragt, ob es einen Weg gibt, den ich in den Callback/Observer weiterleiten soll, wenn diese Art von Logik dort platziert werden soll?
Danke
Hey, danke für die Hilfe. Es funktioniert jetzt wie ein Zauber. Ich hatte eine weitere Frage zu Rückrufen, die ich beim Lesen einiger Dokumente nicht finden konnte. Gibt es eine Möglichkeit, dies vor dem Rückruf nur nach der Methode create auszuführen? Wie es aussieht, läuft es auch nach dem Update, bevor es speichert. Ich muss es trennen, also ist es nur nach dem Erstellen, also warum ich ursprünglich die Logik in dieser Methode auf dem Controller hatte. – Kombo
Am Anfang von pull_info_from_url könnte man sagen "zurück, wenn new_record?" was ich glaube, würde dies erreichen. Oder Sie könnten before_create anstelle von before_save verwenden. http://edgeguides.rubyonrails.org/active_record_validations_callbacks.html#available-callbacks enthält weitere Informationen zu Rückrufen und Validierungen. – PerfectlyNormal