2011-02-05 16 views
14

ho nidificati risorse come questo nel mio routes.rb - (my rake:routes gist)Rails 3 nidificato problema percorso delle risorse come form_for

namespace(:admin) do 
    resources :restaurants do 
    resources :menus 
    resources :menu_items 
    end 
end 

Nel controllore:

def new 
    @restaurant = Restaurant.find(params[:restaurant_id]) 
    @menu_item = @restaurant.menu_items.build 
end 

Cercando di creare un nuovo MenuItem (azione #new), dal url: http://127.0.0.1:3001/admin/restaurants/1/menu_items/new ottengo l'errore:

NoMethodError in Admin/menu_items#new 

Showing /home/fps/workspace3/peded/app/views/admin/menu_items/_form.html.erb where line #1 raised: 

undefined method `admin_menu_items_path' for #<#<Class:0xb6582d78>:0xb6581f2c> 
Extracted source (around line #1): 

1: <%= form_for @menu_item do |f| %> 
... 

ho w faccio a far funzionare questo modulo? E 'stato creato da un ingegnoso: Impalcatura

UPDATE

Ho provato anche questo nel _form:

<%= form_for [:restaurant, @menu_item] do |f| %> 

ma si è conclusa con un errore simile:

Showing /home/fps/workspace3/peded/app/views/admin/menu_items/_form.html.erb where line #1 raised: 

undefined method `restaurant_admin_menu_items_path' for #<#<Class:0xb68162b0>:0xb6813dd0> 
Extracted source (around line #1): 

1: <%= form_for [:restaurant, @menu_item] do |f| % 

Dovrebbe Ho un bug?

+2

Hai risolto questo problema? Una risorsa nidificata nell'amministratore dello spazio dei nomi deve creare la route admin_restaurant_admin_menu_items_path ma creare la route admin_restaurant_menu_items_path. L': admin namespace sono già impostati nel controller se si impalcatura admin/menù Questo deve essere un bug nel rotaie? – bandola

+0

@bandola ho chiesto/ryanb, e ha indicato che potrebbe essere un bug probabilmente –

+0

@FabianoPS: qualche notizia a riguardo? Ho ancora lo stesso messaggio di errore di te! – Aymeric

risposta

11

Penso che il problema sia nella forma. Questo ha funzionato per me:

<%= form_for(@menu_items, :url => restaurant_menu_items_path(@menu_items.restaurant)) do |f| %> 
+3

Con questo approccio, ottengo l'errore: Nessuna route corrisponde a {: action => "show",: controller => "menu_items"} –

2

È possibile cercare i percorsi eseguendo sulla riga di comando.

rake routes 

Sembra che tu stia chiamando i percorsi in modo errato.

Array notazione sarebbe:

E il percorso chiamato per creare:

admin_restaurant_menu_items_path(@restaurant) 
+0

Il primo, resa: 'metodo non definito 'admin_admin_restaurant_admin_menu_items_path' per # <# : 0xb665a570>' –

+0

Il secondo, resa: 'metodo non definito 'admin_menu_items_path 'per # <# : 0xb6863790>' –

12

form_for([@restaurant, @menu_item])

+1

A causa di namedscope, restituisce: 'metodo non definito' admin_restaurant_admin_menu_items_path 'per # <# : 0xb6609ecc>' Quindi posso solo pensarlo è un bug –

+0

Grazie, questo ha funzionato per me –

+0

Per una soluzione senza usare namespace, ha funzionato! Grazie! – CloudRide

8

sto avendo lo stesso problema. L'unica soluzione che ho trovato è di passare un URL al numero form_for.

<% url = (action_name == "new" ? {:action=>"create", :controller=>"admin/menu_item"} : {:action=>"update", :controller=>"admin/menu_item"})%> 

<%= form_for [@restaurant ,@menu_item], :url=>url do |f| %> 

Una nota aggiuntiva, non sarà possibile ottenere params[:menu_item] back, invece si vedrà params[:admin_menu_item].

Spero che ti aiuti!

+0

l'unica cosa che mi ha aiutato, anche se sembra brutto – atkit

+0

Grande! Salvato il mio giorno –

0

L'unica soluzione che ha funzionato correttamente per me (per entrambi nuovi e di modifica delle risorse) è stato:

form_for @menu_item, :url => url_for([:admin, @restaurant, @menu_item]) 
1

Trattare con risorse nidificati e spazi dei nomi è una Vietnam (pita).

Ecco il mio brutta soluzione:

= form_for @admin_menu_item, 
    :url => (@admin_menu_item.try(:new_record?) ? 
     admin_restaurant_menu_items_path(@admin_restaurant) : 
     admin_menu_item_path(@ admin_menu_item)) do |f| 
    ... 

Spero che tu possa aiutare.

0

sto usando Rails 5 (non che io immagino è importante) e questo ha funzionato per me:

= simple_form_for [:admin, @restaurant, @menu_item] do |f| 

Il fatto che è simple_form_for piuttosto che form_for probabilmente non importa neanche.

Stranamente, sto costruendo un'app con gli stessi nomi di risorse esatti.

Problemi correlati