2010-04-27 33 views
29

Problemarecursos anidados en espacio de nombres form_for

El ayudante form_for incorrectamente determina el camino a mi recurso anidado dentro de un espacio de nombres. Los modelos en cuestión son: Forum :: Thread y Forum :: Reply respectivamente, ubicados en una subcarpeta llamada "forum" en el directorio de mis modelos. Esto es en los carriles 3 BETA 3.

routes.rb

namespace :forum do 
    root :to => 'threads#index' 
    resources :threads do 
     resources :replies 
    end 
    end 

app/views/foro/Respuestas/_form.html.haml

... 
    - form_for [@thread, @reply] do |f| 
... 

app/controladores /forum/replies_controller.rb

... 
    def new 
    @reply = Forum::Reply.new 
    end 
... 

error

undefined method `forum_thread_forum_replies_path' 

En referencia a la línea esbozado más arriba en _form.html.haml

Respuesta

45

Editted solución en caso de que la gente no lee las reacciones:

<%= form_for [:admin, @person, @image] do |f| %> 

Respuesta anterior:

Tengo un proyecto con un espacio de nombres de personas de administración y recursos e imágenes, esta es la forma en que construyo mi form_for en rails3, no he encontrado una forma todavía para hacerlo más limpio ...

<%= form_for [@person, @image], :url => admin_person_images_path do |f| %> 
+0

¿Este trabajo tanto para la adición y edición? – nlaq

+0

Claro, solo tendrá que cambiar la URL a la ruta de actualización. – Bitterzoet

+0

Lo que requiere que pase la url en mi forma parcial ... No es un gran problema, pero parece que no deberías tener que hacer eso. – nlaq

2

@Douglas: No funciona para mí. En mi opinión, los nombres en las rutas deben ser plural. Cuando lo haga, como se recomienda, el error es:

undefined method `admin_admin_person_admin_image_path' for #<#<Class:0x55976d0>:0x55a9bc8> 

Mi solución que trabajó para Nuevo:

form_for @image, url: admin_person_images_path(@person, @image) 

Mi solución que funcionó para la edición:

form_for @image, url: admin_person_image_path(@person, @image) 

Ist Hay alguna solución a combinar esto en una forma?

Editar (Solución para una nueva ruta espacio de nombres anidada en un formulario):
Ahora tenía la siguiente lógica en el routes.rb

resources :mobile_users do 
namespace :candystore do 
    resource :transactions 
end 
end 

El formulario para new_mobile_user_candystore_transactions es

<%= form_for [@mobile_user], url: mobile_user_candystore_transactions_path(@mobile_user), method: :post do |f| %> 

para acceder al método de creación Candystore :: TransactionsController y no a, por ejemplo, el método de creación MobileUser o el método de actualización Candystore :: TransactionsController.

2

En Rails 3, la única solución que funcionó para mí correctamente (por tanto nuevos como de los recursos de edición) fue:

form_for @image, :url => url_for([:admin, @person, @image]) 
+0

¡He estado buscando algo que solucione el andamio _form parcial así durante años! ¡Gracias! – nruth

+0

Bueno, en realidad es lo mismo que escribir form_for [: admin, @person, @image], desde form_for llama a url_for internamente. –

Cuestiones relacionadas