2011-05-28 13 views
10

¿Cómo se trata con form_for cuando las rutas están en el espacio de nombres? Estoy recibiendo algunos errores de ruta extraños que realmente espero obtener.Errores de ruta al utilizar rutas de espacios de nombres

Por ejemplo, digamos que usted tiene un controlador llamado Admin::CompaniesController en su :admin espacio de nombres en su routes.rb:

namespace :admin do 
    resources :companies 
end 

La mayoría de las cosas funcionan bien, pero me da un error cuando me hacen una nueva forma . Aquí está el código:

<%= simple_form_for(@company, :url => admin_company_path(@company)) do |f| %> 

Y aquí está el mensaje de error:

ActionView::Template::Error: No route matches {:action=>"show", :controller=>"admin/companies", :id=>#<Company id: nil, name: nil, phone_number: nil, address: nil, postal_code: nil, is_enabled: true, courses_created: 0, province_id: nil, theme_id: nil, payment_plan_id: nil, created_at: nil, updated_at: nil>} 

¿Cómo puedo obtener los carriles para jugar bien aquí? Obviamente quiero una url para ediciones, y otra para nuevas formas. Por lo general, nunca tendría que poner :url en mis declaraciones form_for, pero debido a la anidación, me veo obligado a hacerlo.

No tengo ni idea de qué hacer aquí ahora, al menos no con elegancia.

Respuesta

24

Intente utilizar simple_form_for([:admin, @company]) do |f|

+0

Eso es mucho mejor que mi solución anterior. Gracias. Me alegra que los rieles tuvieran una buena forma de hacerlo. –

+0

Impresionante, me alegra ver que funcionó para ti. Buena suerte con tu aplicación! –

+0

¡Impresionante! También tenía el mismo problema aquí, migrando de Rails 4.0.0 a 4.0.1, usando simple_form 3.0.0. ¡Gracias! – tomasmuller

0

Creo que sólo tengo que pluralizar el camino al final de la ruta, así:

<%= simple_form_for(@company, :url => admin_companies_path(@company)) do |f| %> 

Esto no es lo que yo hubiera esperado. Solo lo he adivinado. Esta no es una ruta válida ni nada por el estilo, pero parece funcionar para puts y posts.

+0

Si lo hace de esta manera, necesita configurar una url diferente si está editando o creando una nueva entrada; la nueva entrada usaría admin_companies_path y una edición usaría admin_company_path (@company), pero la solución anterior es mejor para todos porque funciona correctamente tanto para edición como para nueva. –

Cuestiones relacionadas