Ruby on rails RubyonRails:链接到没有合适的ID

Ruby on rails RubyonRails:链接到没有合适的ID,ruby-on-rails,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,

所以,我犯了这个错误

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 %>
它应该看起来像
example.com/admin/menu\u bar/add\u page\u to\u 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

你的路线将要评估到

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

因此Rails正在寻找一个ID为
add_page_to_menu
MenuBar
。您需要为自定义操作向路由添加成员方法。路由应如下所示:

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 map.namespace“admin”do | admin| admin.root:controller=>:site\u prefs,:action=>:index admin.resources:site\u prefs 管理员资源:链接页面 admin.resources:menu_栏,:member=>{:add_page_to_menu=>:get} 结束 指向的
链接应该如下所示:

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(“add”,menu bar\u add_page_to_menu menu path(@menu bar,:page=>@page.id)

生成的url应该如下所示:

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
http://example.com/admin/menu_bars/1/add_page_to_menu?page=1


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

我认为我们需要更多的信息。你能粘贴呈现此视图的控制器方法和创建这些路由的routes.rb片段吗?另外,我很确定
:action
的符号应该是还有,只要动作/控制器没有“/”,它们也可以是符号。我更喜欢这样,因为只需少敲两次键。(除非你使用aptana,否则还是一样的)但是我把它改成了引号,只是想试试。没有错误。你能发布相关的路由吗?我猜你有一个名称空间:admin…resources:menu\u bar,它将定义一个“show”因此,查找admin/resources/menu\u bar/:id其中:id是add\u page\u to\u menu为什么需要该id,因为它已经作为
菜单
参数传入?将该位添加到我的路由中,会弄乱我的所有链接。=\,在某一点上,我得到了一个代理错误……这很奇怪……因为我没有使用代理。(代理错误表示它无法处理请求GET/admin/.Oops,在成员路由上的语法是反向的。它应该是
admin.resources:menu\u bar,:member=>{:add\u page\u to\u menu=>:GET}
相反。你能试试吗?谢谢,我还找到了另一个选择。如果我在链接中硬编码:id属性,它就不会出错。愚蠢的rails。