未定义的方法`page_path'rails

undefined method `page_path' rails

Rails5.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 指南,但我收到错误:

undefined method `page_path' for #<#> :0x007fbdfd15f000> Did you mean? image_path Extracted source (around line #3):

Edit page

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

<%= form.label :slug %>

我怀疑是命名空间的问题,我该如何解决?

您还没有命名路线。尝试:

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

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

我没有看到您在路线中为 'page_path' 定义路线的位置。

您已定义 'admin_page_path'。

使用 'rails routes' 查看您的路线是如何映射的。

此外,在您的控制器中,您可以在 class 定义之后使用 'layout "admin"' 来为所有操作使用该布局。

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

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