2010-12-23 29 views
0

所以,我得到這個錯誤Ruby on Rails的:的link_to沒有適當的ID

Couldn't find MenuBar with ID=add_page_to_menu 

但我對創建該錯誤的鏈接代碼如下:

<%= link_to "add", 
       :controller => "admin/menu_bars", 
       :action => "add_page_to_menu", 
       :page => page.id, 
       :menu => @menu_bar.id %> 

的URL,我得到的錯誤上是

http://example.com/admin/menu_bars/add_page_to_menu?menu=1&page=1 

它應該是這個樣子example.com/admin/menu_bars/add_page_to_menu/1?menu=1&page=1 (我想,我可能是錯的,看到如何其沒有工作=(

在控制器中的相應動作:

def add_page_to_menu 
    @menu_bar = MenuBar.find(params[:menu]) 
    @page = LinkPage.find(params[:page]) 

    @menu_bar.link_pages << @page 
    if @menu_bar.save 
     format.html { render :action => "edit" } 
    else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @menu_bar.errors, :status => :unprocessable_entity } 
    end 
    end 

路線:

map.namespace "admin" do |admin| 
    admin.root :controller => :site_prefs, :action => :index 
    admin.resources :site_prefs 
    admin.resources :link_pages 
    admin.resources :menu_bars 
    end 
+0

我想我們需要更多的信息。你能否粘貼呈現這個視圖的控制器方法和創建這些路由的routes.rb片段? – cdmwebs 2010-12-23 17:25:45

+0

另外,我很確定`:action`的符號應該是一個字符串。 – cdmwebs 2010-12-23 17:26:41

回答

0

您的路線是要EVAL到

http://example.com/admin/menu_bars/:id?menu=1&page=1

so Rails正在尋找MenuBar機智h的ID爲add_page_to_menu。您需要將成員方法添加到您的自定義操作的路由中。該路線應該是這樣的:

map.namespace "admin" do |admin| 
    admin.root :controller => :site_prefs, :action => :index 
    admin.resources :site_prefs 
    admin.resources :link_pages 
    admin.resources :menu_bars, :member => { :add_page_to_menu => :get } 
end

link_to應該是這個樣子:

link_to("add", menu_bar_add_page_to_menu_path(@menu_bar, :page => @page.id)

和生產應該是這個樣子的網址:

http://example.com/admin/menu_bars/1/add_page_to_menu?page=1

在這方面還有一些優化要做,但我認爲它會讓你成爲至少是這個問題。