hilft diese Arbeit „gut“ mit den Rails URL Helfer haben Sie to_param
in Ihrem Modell außer Kraft setzen müssen:
def to_param
permalink
end
Wo permalink
vielleicht erzeugt wird durch eine before_save
before_save :set_permalink
def set_permalink
self.permalink = title.parameterize
end
Der Grund, warum Sie einen Permalink erstellen, ist, dass Sie möglicherweise einen Titel haben, der nicht URL-freundlich ist. Das ist, wo parameterize
hereinkommt.
Nun, wie zum Finden dieser Beiträge basierend auf was permalink
ist, können Sie entweder die einfache Route oder die harte Route gehen.
Einfache Strecke
to_param
definieren etwas anders:
def to_param
id.to_s + permalink
end
Forum.find(params[:id])
Weiter mit dem params[:id]
etwas wie 1-my-awesome-forum
wäre. Warum funktioniert das noch? Nun, Rails ruft to_i
für das Argument, das an find
übergeben wird, und das Aufrufen von to_i
für diese Zeichenfolge wird einfach 1
zurückgeben.
harter Weg
Leave to_param
gleich.Resort zu verwenden find_by_permalink
in Ihrem Controller, mit params[:id]
, die in Form geführt wird, um die Routen:
Model.find_by_permalink(params[:id])
Nun zum spaßigen Teil
Jetzt können Sie die Ressource aus der URL zu nehmen. Nun, es ist ein Sisyphus-Ansatz. Sicher, Sie könnte stoppen mit den Routing-Helper Ruby on Rails bietet wie map.resources
und definieren sie mit map.connect
aber ist es wirklich so viel Gewinn wert? Welche "besonderen Superkräfte" gewährt es dir? Keine, fürchte ich.
Aber nach wie vor, wenn Sie das tun wollen, ist hier ein guter Ausgangspunkt aus:
get ':forum_id/:board_id/:topic_id', :to => "topics#show", :as => "forum_board_topic"
Ressourcen Routing, verschachtelten Routing und flache Routing werden alle die Namen der Ressource im Weg haben, gehen, so Wenn Sie nur IDs oder irgendeinen Forumsnamen im Pfad haben wollen, müssen Sie reguläres Routing durchführen, wahrscheinlich mit beschränkten Parametern. – Corey