Wie man belongs_to in Ruby on Rails verwendet

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.

zusammenhängende Posts

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEGerman