Il routing con spaziatura dei nomi è cambiato in Rails 2.3?
-
05-07-2019 - |
Domanda
Ho uno spazio dei nomi admin che mi dà le solite rotte come admin_projects e admin_project, tuttavia non si stanno comportando nel solito modo. Questo è il mio primo progetto Rails 2.3, quindi forse non riesco a trovare alcuna informazione tramite Google.
map.namespace(:admin) do |admin|
admin.resources :projects
end
La cosa strana è per un determinato URL (es. / admin / projects / 1) Non devo passare un oggetto per ottenere l'URL, in qualche modo li indovina:
<%= admin_project_path %> # => /admin/projects/1
Nessun problema, non proprio un problema, ma non l'ho notato prima.
Ma se provo a passare un oggetto come al solito:
<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>
": id " sembra contenere l'intero oggetto, quindi provo a passare l'id direttamente e funziona:
<%= admin_project_path(@project.id) %> # => /admin/projects/1
Questo non sarebbe così male, ma quando si tratta di moduli di solito uso [: admin, @object], tuttavia:
<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'
Quindi non posso passare un ID, poiché ha bisogno di una classe di oggetti per elaborare la rotta corretta da usare.
<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.
Non riesco a individuare alcun errore e questo è piuttosto standard, quindi non sono sicuro di cosa non vada ...
Soluzione
Interessante. Cosa succede quando si definisce un metodo to_param
su Project? Ad esempio
class Project < ActiveRecord::Base
def to_param
self.id
end
end
Questo dovrebbe essere il valore predefinito e questo non dovrebbe essere necessario. Ma cosa succede se lo rendi esplicito? Prova ad aggiungere il metodo sopra e poi torna al tuo approccio originale passando solo per @project
Altri suggerimenti
Vorrei poterti aiutare in questo. Abbiamo una grande applicazione con diverse sezioni spaziate dai nomi. I nostri percorsi sono definiti con il metodo esatto che hai descritto e stiamo chiamando il nostro aiutante di percorso con oggetti. In nessun punto dell'applicazione stiamo accedendo utilizzando l'id.
La nostra applicazione è stata avviata su Rails 2.1 e è passata attraverso 2.2 e 2.3 senza modifiche significative al routing. Spiacente, non potrei essere più di aiuto.
Peer