Stellen Sie sich folgende Situation vor:
Ich habe ein dog
Modell und ein house
Modell. Ein Hund kann zu einem Haus gehören, und ein Haus kann viele Hunde haben, also:
Class Dog < ActiveRecord::Base
belongs_to :house
end
Class House < ActiveRecord::Base
has_many :dogs
end
Stellen Sie sich vor, ich möchte auch Hunde schaffen, die kein Haus haben. Sie gehören nicht zum Haus. Kann ich diese Beziehungsstruktur weiterhin verwenden und :house_id
beim Erstellen einfach keine Informationen angeben?
Gibt es eine bessere Praxis?
Anmerkung: Ich habe diese Analogie verwendet, um mein Problem zu vereinfachen, aber meine reale Situation ist: Ich habe ein Modell, das ein Benutzer Instanzen davon generieren kann. Er kann auch Sammlungen dieser Instanzen erstellen, eine Instanz jedoch außerhalb einer Sammlung belassen.
ruby-on-rails
ruby
activerecord
João Daniel
quelle
quelle
house_id
null
du kannst gehen und wann du@dog.house
es zurückbringen wirstnil
und so kannst du es überprüfenif @dog.house
und so weiter.t.integer "house_id", :null => false
.Antworten:
Ich denke, es ist ein absolut normaler Ansatz.
Sie können einfach
house_id
mitnull
Wert in der Datenbank für die Modelle belassen, die nicht zu anderen gehören.quelle
Seien Sie vorsichtig damit in Rails 5 ...
von: http://blog.michelada.io/whats-new-in-rails-5
quelle
class User < ApplicationRecord belongs_to :team, optional: true end class Team < ApplicationRecord has_many :users end