Ruby on Rails: link_to не имеет соответствующего ID - PullRequest
0 голосов
/ 23 декабря 2010

Итак, я получил эту ошибку

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

1 Ответ

0 голосов
/ 23 декабря 2010

Ваш маршрут будет проходить до

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

, поэтому Rails ищет MenuBar с идентификатором add_page_to_menu.Вам нужно добавить метод member к маршрутам для вашего настраиваемого действия.Маршруты должны выглядеть следующим образом:

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)

, а полученный URL должен выглядеть примерно так:это:

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

В этом еще есть какая-то оптимизация, но я думаю, что она поможет вам выйти за рамки этой проблемы, по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...