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 ...

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top