Rails 4:
Nehmen wir an, wir haben zwei Modelle Movie und Actor. Actor hat viele Filme und Movie gehört zu Actor. In den meisten Fällen überprüfen die Entwickler, ob der Fremdschlüssel actor_id vorhanden ist oder nicht. In diesem Fall wird das Modell actor nicht daraufhin überprüft, ob die eingegebene actor_id vorhanden ist oder nicht. Es ist genau wie bei der Attributüberprüfung, die immer überprüft, dass die Felder nicht leer sein sollten, wenn das Formular übermittelt wird.
Validierung mit Fremdschlüssel:
Klasse Movie < Anwendungsdatensatz
belongs_to :actor
validiert :actor_id, Anwesenheit: true
end
Klasse Actor < ApplicationRecord
has_many :movies, abhängig: :destroy
end
Im obigen Szenario wird das Vorhandensein oder Nichtvorhandensein einer Akteurs-ID wie bei einer normalen Attributsprüfung überprüft.
Ex: Actor.create(title: "abc").
=> {id: 1, Titel: 'abc'}
m = Movie.new(title: "ok ok", actor_id: 111)
=> m.valid? => true
=> Actor.find(111)
ActiveRecord::RecordNotFound: Actor mit 'id'=111 konnte nicht gefunden werden
Wir können die Filmaufzeichnung auch ohne gültigen Schauspieler speichern.
Mit Assoziationen
Klasse Movie < Anwendungsdatensatz
belongs_to :actor
validiert :Akteur, Vorhandensein: true
end
(oder)
Klasse Movie < ApplicationRecord
belongs_to :actor, required: true
end
Klasse Actor < ApplicationRecord
has_many :movies, abhängig: :destroy
end
Beispiel: Actor.create(Titel: "abc").
==> {id: 1, Titel: 'abc'}
m = Movie.new(Titel: "ok ok", Akteur_id: 111)
==> m.valid? => false
==> m.errors.full_messages, ['Schauspieler kann nicht leer sein']
In diesem Fall wird immer überprüft, ob der eingegebene Akteur existiert oder nicht. Im Falle eines ungültigen Akteurs erhalten Sie eine Fehlermeldung. Dies ist die beste Vorgehensweise, um Ihre Verknüpfungen zu erstellen. Es wird immer geprüft, ob das verknüpfte Objekt existiert oder nicht.
Schienen5
Ab rails5 wurden diese Validierungen standardmäßig hinzugefügt. Es validiert Assoziationsobjekt sollte vorhanden sein, wenn Sie belongs_to Assoziationen definieren.
Anmerkungen zur Veröffentlichung
http://guides.rubyonrails.org/5_0_release_notes.html(belongs_to löst nun standardmäßig einen Validierungsfehler aus, wenn die Assoziation nicht vorhanden ist).
Wir können diese Funktion in der Anwendung vollständig deaktivieren, indem wir in der Initialisierungsdatei config opton einstellen.
config/initializers/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = false
Diese Initialisierungsdatei ist nur in rails5-Anwendungen vorhanden. Sie müssen diese Initialisierungsdatei manuell hinzufügen, wenn Sie von einer älteren Version Ihrer Rails-Anwendung migrieren und die erforderlichen Änderungen vornehmen.
Klasse Post < ApplicationRecord
has_many :comments, dependent: :destroy
end
Klasse Kommentar < ApplicationRecord
gehört_zu :post
end
c = Comment.create(title: "toller Beitrag")
c.errors.full_messages.to_sentence
=> "Beitrag muss existieren"
Wir können keinen Kommentar-Datensatz ohne einen zugehörigen Datensatz erstellen.
Wir können dieses Standardverhalten abstellen, indem wir
belongs_to :post, optional: true
c = Kommentar.erstellen(Titel: "Toller Beitrag")
=>
RailsCarma hat angeboten Ruby on Rails-Entwicklungsdienste seit über 8 Jahren. Unsere Entwickler sind mit der Ausführung aller Arten von Aufgaben bestens vertraut Ruby on Rails-Webentwicklung Projekte und Erweiterung der Funktionen Ihrer vorhandenen Rails-Anwendungen. Kontaktieren Sie uns, um mehr über unsere Entwicklungskompetenzen und die Projekte zu erfahren, an denen wir gearbeitet haben.