Hat namedspaced Routing in Rails geändert 2.3?
-
05-07-2019 - |
Frage
Ich habe einen Admin-Namespace, die mir die üblichen Routen wie admin_projects und admin_project gibt, aber sie sind nicht in der üblichen Art und Weise verhalten. Dies ist mein erstes Rails 2.3 Projekt so vielleicht im Zusammenhang kann ich keine Informationen über Google finde jedoch.
map.namespace(:admin) do |admin|
admin.resources :projects
end
Das Merkwürdige für eine bestimmte URL ist (. ZB / admin / Projekte / 1) Ich muss nicht passieren in einem Objekt-URL, um es irgendwie errät sie:
<%= admin_project_path %> # => /admin/projects/1
Keine Sorge, nicht wirklich ein Problem habe gerade bemerkt, das nicht vor.
Aber wenn ich versuche, und ein Objekt übergeben wie üblich:
<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>
„: id“ scheint das gesamte Objekt zu enthalten, so dass ich versuchen, das Bestehen die id direkt und es funktioniert:
<%= admin_project_path(@project.id) %> # => /admin/projects/1
Das wäre nicht so schlimm, aber wenn es um Formen kommt ich in der Regel verwenden Sie [: admin, @object], aber:
<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'
So kann ich nicht in einem id passieren, da es eine Objekt Klasse muss die richtige Route trainieren zu können.
<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.
Ich kann keinen Fehler erkennen und das ist ziemlich Standard so dass ich nicht sicher bin, was schief läuft ...
Lösung
Interessant. Was passiert, wenn Sie eine to_param
Methode auf Projekt definieren? Zum Beispiel
class Project < ActiveRecord::Base
def to_param
self.id
end
end
Dies sollte der Standard sein, und dies sollte nicht notwendig sein. Aber was passiert, wenn Sie es explizit zu machen? Versuchen Sie, das obige Verfahren dann zu Ihrem ursprünglichen Ansatz geht zurück von nur etwa @project vorbei
Andere Tipps
Ich wünsche ich Ihnen auf diesem helfen könnte. Wir haben eine große Anwendung mit mehreren Namensraum Abschnitten. Unsere Routen sind in der genauen Methode definieren Sie beschrieben haben, und wir rufen unseren Weg Helfer mit Objekten. Nein, wo in der Anwendung zugreifen wir die ID verwendet wird.
Unsere Anwendung gestartet on Rails 2.1 und hat sich durch 2.2 und 2.3 ohne wesentliche Änderungen an der Routing übergegangen ist. Leider konnte ich nicht mehr helfen.
Peer