Ruby on Rails:link_to没有适当的ID

时间:2010-12-23 17:15:26

标签: ruby-on-rails

所以,我收到了这个错误

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

我收到错误的网址是

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

1 个答案:

答案 0 :(得分:0)

您的路线将转到

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

所以Rails正在寻找ID为MenuBar的{​​{1}}。您需要将成员方法添加到自定义操作的路由中。路线应如下所示:

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

并且add_page_to_menu看起来像这样:

link_to

并且生成的网址应如下所示:

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

还有一些优化工作要做,但我认为至少会让你超越这个问题。