2016-04-14 20 views
0

der Titel klingt seltsam, so ist mein Problem ... Ich baue eine einfache App - Ich habe ein Restaurant-Modell, das has_many Mahlzeiten, die Benutzer zu ihren Wagen als Aufträge hinzufügen können (das Bestellmodell hat die ID einer Mahlzeit und eine Menge). Jetzt möchte ich in der Lage sein, Optionen zu den Mahlzeiten hinzuzufügen - z.B. Eine Pizza Mahlzeit würde "kleine", "mittlere" und "große" Option haben, die den Preis dieses Artikels beeinflussen würde. Wie denkst du, ist der beste Weg, dies zu implementieren? Mein Problem ist, dass jede Mahlzeit verschiedene Optionen haben kann, und Optionen können unterschiedliche Preise haben. Daher kann ich nicht einfach ein Attribut "option" als String hinzufügen. Auf der anderen Seite, wenn ich ein anderes Modell verwenden, gäbe es in den Routen zu viel Verschachtelung sein, die ich lese eine schlechte Praxis ist:Schienen, Optionen für das Modell

resources :restaurants do 
    resources :meals do 
     resources :options 
    end 
end 

Wie dies zu vermeiden? Danke für irgendwelche Vorschläge !!

Antwort

0

Es gibt keinen Grund, kein Optionsmodell zu haben, um jede Ihrer Optionen nach Bedarf zu halten - obwohl Sie wirklich eine flache Route für Restaurants in Betracht ziehen sollten, da das Restaurant selbst nichts mit Optionen zu tun hat. Anstatt also Ihre Routen könnte wie folgt aussehen:

resources :restaurants, shallow: true do 
    resources :meals do 
     resources :options 
    end 
end 

Wenn Sie Ihre Routen suchen jetzt (Rake Routen) Sie werden sehen, wie viel sie sich ändern.

Aber es ist eine Überlegung wert, dass Sie die Ressourcen für Optionen nicht benötigen. Ein Besucher erstellt keine neuen Optionen. Sie fügen einer Sammlung bereits vorhandene Optionen hinzu (Essen + Option = Bestellung .. oder etwas Ähnliches) - daher haben Sie diese Route möglicherweise nur im Admin-Namespace, um neue Optionen für ein Menü zu erstellen.

+0

Ich wusste nicht genau, wer die Mahlzeiten hinzufügen kann ... Ich möchte, dass Benutzer das können - wenn jemand der Manager eines Restaurants ist, würde er eine Mahlzeit ohne Zugang zum Admin-Panel hinzufügen. Ich habe ein Juwel (spree_flexi_variants) gefunden, das genau das tut, was ich wollte, aber leider nicht mit meiner App kompatibel ist: / –