2011-02-05 41 views
14

我在routes.rb中嵌套資源這樣的 - (my rake:routes gistRails 3中嵌套的資源路徑的問題,因爲的form_for

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

在控制器:

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

試圖創建一個新的菜單項(動作#NEW),通過網址:http://127.0.0.1:3001/admin/restaurants/1/menu_items/new我得到的錯誤:

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| %> 
... 

何我可以讓這個表單起作用嗎?它創造出了一個漂亮的:腳手架

UPDATE

我也試過這個在_form:

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

但隨着類似的錯誤結束:

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| % 

應該我提交了一個錯誤?

+2

你解決了這個問題嗎? 命名空間admin中的嵌套資源應該創建路由admin_restaurant_admin_menu_items_path,但創建路由admin_restaurant_menu_items_path。 的:管理命名空間的控制器已經設置,如果你腳手架管理員/菜單 這必須是在軌道中的錯誤? – bandola 2011-04-11 14:30:06

+0

@bandola我問/ ryanb,他指出它很可能是一個bug – 2011-07-21 11:56:18

+0

@FabianoPS:有關它的任何消息?仍然收到了與你相同的錯誤信息! – Aymeric 2011-10-26 15:51:18

回答

11

我認爲問題出現在表單中。這爲我工作:

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

您可以通過在命令行上運行來查找路由。

rake routes 

看起來你不正確地呼叫你的路線。

陣列的符號是:

併爲創建命名路線:我有同樣的問題

admin_restaurant_menu_items_path(@restaurant) 
+0

第一,產量:'未定義的方法`admin_admin_restaurant_admin_menu_items_path'爲#<#類別:0xb665b448>:0xb665a570>' – 2011-02-09 17:21:16

8

。我找到的唯一解決方案是將URL傳遞給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| %> 

一個說明,你不會得到params[:menu_item] back,而不是你會看到params[:admin_menu_item]

希望能幫助你!

0

爲我工作正常,唯一的解決方案(爲新的和編輯資源)是:

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

嵌套資源和命名空間處理是一個越南(皮塔)。

這是我討厭的解決

= 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| 
    ... 

我希望你能有所幫助。

0

我使用Rails的5(不是我想象它的問題),這爲我工作:

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

,它的simple_form_for而不是form_for可能並不重要無論是事實。

有趣的是,我正在構建一個具有相同確切資源名稱的應用程序。