2010-04-27 8 views
29

Problemzagnieżdżone zasobów w przestrzeni nazw form_for

form_for pomocnik nieprawidłowo określa ścieżkę do mojego zagnieżdżonych zasobu wewnątrz przestrzeni nazw. Te modele to: Forum :: Wątek i Forum :: Odpowiedz odpowiednio:, znajdujący się w podfolderze o nazwie "forum" w katalogu moich modeli. Jest to w Rails 3 Beta 3.

routes.rb

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

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

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

app/controllers /forum/replies_controller.rb

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

Błąd

undefined method `forum_thread_forum_replies_path' 

W nawiązaniu do przedstawionej powyżej linii w _form.html.haml

Odpowiedz

45

editted rozwiązanie w przypadku ludzi nie czytać reakcje:

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

Stara odpowiedź:

Mam projektu z przestrzeni nazw administratora, a ludzie i obrazy zasobów, w ten sposób buduję moją form_for w rails3, nie znaleźli sposób jeszcze zrobić to czystsze ...

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

Czy ta praca zarówno dla dodawania i edycji? – nlaq

+0

Oczywiście, wystarczy zmienić adres URL na ścieżkę aktualizacji. – Bitterzoet

+0

Co wymaga, żebym podał adres URL w mojej formie częściowej ... Nie jest to wielka sprawa, ale wydaje się, że nie powinieneś tego robić. – nlaq

2

@Douglas: To nie działa dla mnie. Moim zdaniem nazwy w trasach powinny być pluralizowane. Kiedy zrobić jak zaleca, błąd jest:

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

Moje rozwiązanie, że pracował dla nowych:

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

Moje rozwiązanie, że pracował dla EDIT:

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

Ist istnieje rozwiązanie do połączyć to w jedną formę?

Edit (rozwiązanie dla nowej trasy zagnieżdżonych przestrzeni nazw w formie):
Teraz miałem następujące logika w routes.rb

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

Formularz new_mobile_user_candystore_transactions jest

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

, aby uzyskać dostęp do Candystore :: TransactionsController, a nie na przykład do metody create MobileUser lub Candystore :: TransactionsController update method.

2

W Rails 3, jedynym rozwiązaniem, które dla mnie pracował poprawnie (zarówno dla nowych i edycji zasobu) była następująca:

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

Poszukałem czegoś, co naprawi rusztowanie _form częściowe tak od wieków! Dziękuję Ci! – nruth

+0

Cóż, jest to faktycznie to samo, co pisanie form_for [: admin, @person, @image], ponieważ form_for wywołuje url_for wewnętrznie. –

Powiązane problemy