2016-04-16 16 views
0

Ich versuche sicherzustellen, dass meine Rails-App Verbindungen sicher baut, und ich bin mir nicht sicher, wie ich den Fall behandeln soll, in dem ich Modelle habe, die im Wesentlichen durch ein anderes Modell "im Besitz" sind.Sicheres Erstellen von Modellassoziationen

Ein Beispiel wäre, dass ich ein Vater bin, der Töchter im Teenageralter hat. Sie besitzen einige Apple-Produkte. Die Produkte gehören technisch dazu, aber ich habe alles bezahlt - ich besitze es.

Außerdem möchte ich nicht, dass Fremde meinen Töchtern nur neue Apfelprodukte geben.

Der Code für das wie folgt aussieht:

class Father 
    has_many :teenage_daughters 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

class TeenageDaughter 
    belongs_to :father 

    accepts_nested_attributes_for :apple_products, 
           reject_if: :all_blank, 
           allow_destroy: true # oh yeah 
end 

class AppleProduct 
    belongs_to :teenage_daughter 
    # Should i be doing something like this? 
    # belongs_to :father 
end 

Meine Frage ist:

Sollte ich innerhalb von AppleProduct eine belongs_to Beziehung ZURÜCK zu Vater das Hinzufügen und irgendwie, wenn ich schaffe AppleProduct s ich current_user gesetzt?

Ich mache mir Sorgen darüber, einen Fehler zu machen und irgendwie eine manipulierte Anfrage zu erlauben, die es Leuten erlaubt, Zeilen mit Benutzerkonten, die nicht zu ihnen gehören, zu verbinden oder zu trennen.

Antwort

2

Lassen Sie mich etwas zitieren, was Sie gesagt:

ich dafür bezahlt alle - ich besitze es

Was dies bedeutet, ist, dass das Modell AppleProduct einen Vermögenswert darstellt, die der Vater besitzen, und Sie lassen jemanden (in diesem Fall die Kinder) es benutzen. Dies ist eine, meiner Meinung nach, näherer Weg zu Ihrem wirklichen Leben Modell:

class Father 
    has_many :apple_products 
    has_many :teenage_daughters 
end 

class TeenageDaughter 
    belongs_to :father 
end 

class AppleProduct 
    belongs_to :owner, class_name: 'Father' 
    belongs_to :user, class_name: 'TeenageDaughter' 
end 

Dadurch verhindern Sie eine explizite Darstellung haben, ist die owner und die user dieser Produkte.

Auch nicht relevant für Ihre Frage, aber in Betracht ziehen, den Namen von TeenageDaughter zu Child zu ändern.