2010-04-27 14 views
29

Problemarisorse nidificate in namespace form_for

L'aiutante form_for determina in modo non corretto il percorso per la mia risorsa nidificato all'interno di uno spazio dei nomi. I modelli in questione sono: Forum :: Thread e Forum :: Rispondi rispettivamente, situato in una sottocartella denominata "forum" nella directory dei miei modelli. Questo è in Rails 3 beta 3.

routes.rb

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

app/views/forum/risposte/_form.html.haml

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

app/controller /forum/replies_controller.rb

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

errore

undefined method `forum_thread_forum_replies_path' 

In riferimento alla linea sopra delineato in _form.html.haml

risposta

45

Editted soluzione nel caso in cui la gente non legge le reazioni:

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

Vecchia risposta:

Ho un progetto con un dominio admin e Persone e immagini di risorse, questo è il mio modo di costruire il mio form_for in Rails3, non ho trovato un modo solo ancora per farlo più pulito ...

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

Sarà questo lavoro sia per l'aggiunta e la modifica? – nlaq

+0

Certo, basterà cambiare l'URL nel percorso di aggiornamento. – Bitterzoet

+0

Che richiede che io passi l'url nel mio modulo parziale ... Non è un grosso problema, ma sembra che non dovresti farlo. – nlaq

2

@Douglas: Non funziona per me. A mio avviso, i nomi delle rotte dovrebbero essere pluralizzati. Quando faccio come consigliato, l'errore è:

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

La mia soluzione che ha funzionato per Nuovo:

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

La mia soluzione che ha funzionato per Edit:

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

Ist c'è alcuna soluzione per combinare questo in una forma?

Edit (Soluzione per un nuovo percorso namespace nidificato in una forma):
Ora avevo la seguente logica nella routes.rb

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

Il modulo per new_mobile_user_candystore_transactions è

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

per arrivare a Candystore :: TransactionsController crea il metodo e non ad es. Il metodo di creazione MobileUser o il metodo di aggiornamento di Candystore :: TransactionsController.

2

In Rails 3, l'unica soluzione che ha funzionato correttamente per me (per entrambi nuovi e di modifica delle risorse) è stato:

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

Ho seguito qualcosa che corregge lo scaffold _forma in questo modo per anni! Grazie! – nruth

+0

Beh, è ​​effettivamente lo stesso di scrivere form_for [: admin, @person, @image], poiché form_for chiama url_for internamente. –

Problemi correlati