未定义的方法`page_path'导轨

时间:2017-09-08 14:12:32

标签: routes namespaces ruby-on-rails-5.1

Rails 5.1.3

我在rails中的路由文件中有一组命名空间的路由:

Rails.application.routes.draw do
  get 'page/index'

  namespace :admin do
    resources :pages
    resources :sections
  end

  get '*page', to: 'page#index'

  root 'page#index'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

然后我有一个页面控制器:

class Admin::PagesController < ApplicationController
  def new
    render layout: 'admin'
  end

  def index
    @pages = Page.all

    render layout: 'admin'    
  end

  def edit    
    @page = Page.find(params[:id])

    render layout: 'admin'    
  end
end

正如您所看到的,我已经定义了我的编辑方法,在该方法中我获得了相应ID的页面(非常典型)。

在我的HTML中,我有:

<h1>Edit page</h1>

<%= form_with(model: @page) do |form| %>

 <p>
   <%= form.label :slug %><br>
   <%= form.text_field :slug %>
 </p>

 <p>
   <%= form.label :title %><br>
   <%= form.text_area :title %>
 </p>

 <p>
   <%= form.submit %>
 </p>

<% end %>

根据rails指南,但我收到错误:

  

未定义的方法`page_path&#39;对于#&lt;#&gt;   :0x007fbdfd15f000&GT;   你的意思是? IMAGE_PATH   提取的来源(第3行):

     

编辑页面

     

&lt;%= form_with(型号:@page)do | form | %GT;   

  &lt;%= form.label:slug%&gt;

我怀疑这是由命名空间引起的,我该如何解决?

3 个答案:

答案 0 :(得分:2)

你是对的,它是关于命名空间的:

<%= form_with(model: [ :admin, @page ]) do |form| %>

答案 1 :(得分:1)

我看不到你在路线中为'page_path'定义路线的位置。

您已定义'admin_page_path'。

使用'rails routes'查看路线的确切排列方式。

此外,在您的控制器中,您可以在课程定义后使用“layout”admin“'将该布局用于所有操作。

答案 2 :(得分:0)

您尚未命名路线。尝试:

get 'page/index', as: 'page'

如果您从终端运行rake路由,它会为您提供所有路由名称,参数和命名空间的非常有用的细分