¿Ha cambiado el enrutamiento por nombre en Rails 2.3?
-
05-07-2019 - |
Pregunta
Tengo un espacio de nombres de administrador que me da las rutas habituales, como admin_projects y admin_project, sin embargo, no se comportan de la manera habitual. Este es mi primer proyecto Rails 2.3, así que quizás esté relacionado. Sin embargo, no puedo encontrar ninguna información a través de Google.
map.namespace(:admin) do |admin|
admin.resources :projects
end
Lo extraño es que para una URL dada (p. ej. / admin / projects / 1) no tengo que pasar un objeto para obtener las URL, de alguna manera las adivina:
<%= admin_project_path %> # => /admin/projects/1
No se preocupe, no es realmente un problema, simplemente no lo noté antes.
Pero si trato de pasar un objeto como de costumbre:
<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>
": id " parece contener todo el objeto, así que intento pasar la identificación directamente y funciona:
<%= admin_project_path(@project.id) %> # => /admin/projects/1
Esto no sería tan malo, pero cuando se trata de formularios, generalmente uso [: admin, @object], sin embargo:
<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'
Por lo tanto, no puedo pasar una identificación, ya que necesita una clase de objetos para encontrar la ruta correcta para usar.
<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.
No puedo detectar ningún error y esto es bastante estándar, así que no estoy seguro de qué está yendo mal ...
Solución
Interesante. ¿Qué sucede cuando define un método to_param
en Project? Por ejemplo
class Project < ActiveRecord::Base
def to_param
self.id
end
end
Esto debería ser el predeterminado y no debería ser necesario. Pero, ¿qué sucede si lo haces explícito? Intente agregar el método anterior y luego vuelva a su enfoque original de solo pasar @project
Otros consejos
Desearía poder ayudarte en esto. Tenemos una gran aplicación con varias secciones con espacios de nombres. Nuestras rutas se definen en el método exacto que usted ha descrito y estamos llamando a nuestro ayudante de ruta con objetos. No estamos accediendo a la aplicación utilizando la identificación.
Nuestra aplicación comenzó en Rails 2.1 y ha pasado a través de 2.2 y 2.3 sin cambios significativos en el enrutamiento. Lo siento, no podría ser más ayuda.
Par