Ich habe eine Kategorie und ein Produktmodell, wo das Produktmodell zu einer Kategorie gehört. Momentan habe ich einen Link in der Kategorie Showansicht, der den Benutzer zu einem neuen Produktformular führt und die Kategorie-ID als die Kategorie festlegt, aus der der Benutzer den Link geklickt hat.Handle-Parameter fehlende Ausnahme in Schienen
Um es klarer zu machen: Benutzer wählt eine Kategorie> Benutzer klickt neuen Produktlink in der Kategorie show view> Produktformular öffnet sich mit der Kategorie ID, die als vorherige Kategorie festgelegt wurde.
Das Problem, das ich habe, ist, dass, wenn der Benutzer zu/products/new geht, ein Parameter fehlende Ausnahme, da die Kategorie ID nicht gefunden werden kann (da eine Kategorie nicht mit der Adresse Anfrage gesendet wird).
Gibt es eine Möglichkeit, dass ich damit umgehen kann, um zu verhindern, dass der Benutzer einfach die/products/new Adresse eingibt und versucht, auf das Formular zuzugreifen? Ich möchte, dass der Benutzer nach Hause umgeleitet wird, wenn er versucht, ein neues Produkt zu erstellen, ohne auf den Link auf einer Kategorieseite zu klicken.
Mein Code für die Produktsteuerung (relevant zu dieser Frage):
def new
@product = @category.products.new
end
def set_category
@category = Category.find_by(id: params[:category_id]) || Category.find(product_params[:category_id])
rescue ActiveRecord::RecordNotFound
end
private
def product_params
params.require(:product).permit(:category_id, :title, :description, :image_url, :price)
end
Link zu neuem Produkt auf Kategorie anzeigen Seite gefunden:
%p= link_to t('.add'), new_product_path(category_id: @category)
Methode der Ausnahme Punkte auf:
def product_params
params.require(:product).permit(
:category_id, :title, :description, :image_url, :price)
end
Jede Hilfe wäre willkommen, und es tut mir leid, wenn dies ein wenig unklar war.
Wie sehen Ihre Routen aus? Vielleicht brauchen Sie geschachtelte Ressourcen, so dass es keine '/ products/new' Route gibt. Außerdem brauchen Sie nicht 'find_by',' find' und 'rescue' für' @ category'; Wenn Ihre Routen richtig eingerichtet sind und 'set_category' an die richtigen Controller-Methoden gebunden ist, dann genügt ein' Category.find'-Aufruf und die übliche Rails 'RecordNotFound'-Behandlung sollte ausreichen. –
Derzeit habe ich: 'Ressourcen: Kategorien' ' Ressourcen: Produkte' in separaten Zeilen. Ich nehme an, Sie wollen es mit einer do-Klausel einrichten und Produkte unter Kategorien verschachtelt? – Isengrim