繁体   English   中英

Rails - 没有路由匹配 [POST] "/page/new"

[英]Rails - No route matches [POST] "/page/new"

我在 rails 投资组合中创建。 根据给定的 id 显示所有页面和单个页面的列表可以正常工作。 向数据库添加新记录时出现问题:No route matching [POST] "/page/new" 这是什么原因? 转到 page / new 后,添加表单正确显示。 数据库是 postgresql,我也使用 Active Storage。

迁移/

class CreatePages < ActiveRecord::Migration[6.0]
  def up 
    create_table :pages do |t|

      t.string "name"
      t.string "description"
      t.string "github"
      t.string "website"
    end
    add_index("pages","id")
  end

  def down
    drop_table :pages
  end

end

page_controller.rb

class PageController < ApplicationController
  def index
    @page = Page.all
  end

  def new
    @page = Page.new
  end

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


  def create
    @page = Page.new(page_params)

    if @page.save
    redirect_to @page
    else
      render 'new'
      end
    end


  def edit
  end

  def delete
  end

  private

  def page_params
    params.require(:page).permit(:name, :description, :github, :website)
  end

end

路由文件

Rails.application.routes.draw do
  resources :page
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

新的.html.erb

<%= form_with scope: :pages, local: true do |form| %>

  <%= form.label "Name" %></br>
  <%= form.text_field :name %></br>

  <%= form.label "Description" %></br>
  <%= form.text_field :description %></br>

  <%= form.label "GitHub" %></br>
  <%= form.text_field :github %></br>

  <%= form.label "Website" %></br>
  <%= form.text_field :website %></br></br>

  <%= form.submit "Add" %></br>

<% end %>

模型/页面.rb

class Page < ApplicationRecord
end

铁路路线

             Prefix Verb   URI Pattern                                                                              Controller#Action
                           page_index GET    /page(.:format)                                                                          page#index
                                      POST   /page(.:format)                                                                          page#create
                             new_page GET    /page/new(.:format)                                                                      page#new
                            edit_page GET    /page/:id/edit(.:format)                                                                 page#edit
                                 page GET    /page/:id(.:format)                                                                      page#show
                                      PATCH  /page/:id(.:format)                                                                      page#update
                                      PUT    /page/:id(.:format)                                                                      page#update
                                      DELETE /page/:id(.:format)                                                                      page#destroy
        rails_postmark_inbound_emails POST   /rails/action_mailbox/postmark/inbound_emails(.:format)                                  action_mailbox/ingresses/postmark/inbound_emails#create
           rails_relay_inbound_emails POST   /rails/action_mailbox/relay/inbound_emails(.:format)                                     action_mailbox/ingresses/relay/inbound_emails#create
        rails_sendgrid_inbound_emails POST   /rails/action_mailbox/sendgrid/inbound_emails(.:format)                                  action_mailbox/ingresses/sendgrid/inbound_emails#create
  rails_mandrill_inbound_health_check GET    /rails/action_mailbox/mandrill/inbound_emails(.:format)                                  action_mailbox/ingresses/mandrill/inbound_emails#health_check
        rails_mandrill_inbound_emails POST   /rails/action_mailbox/mandrill/inbound_emails(.:format)                                  action_mailbox/ingresses/mandrill/inbound_emails#create
         rails_mailgun_inbound_emails POST   /rails/action_mailbox/mailgun/inbound_emails/mime(.:format)                              action_mailbox/ingresses/mailgun/inbound_emails#create
       rails_conductor_inbound_emails GET    /rails/conductor/action_mailbox/inbound_emails(.:format)                                 rails/conductor/action_mailbox/inbound_emails#index
                                      POST   /rails/conductor/action_mailbox/inbound_emails(.:format)                                 rails/conductor/action_mailbox/inbound_emails#create
    new_rails_conductor_inbound_email GET    /rails/conductor/action_mailbox/inbound_emails/new(.:format)                             rails/conductor/action_mailbox/inbound_emails#new
   edit_rails_conductor_inbound_email GET    /rails/conductor/action_mailbox/inbound_emails/:id/edit(.:format)                        rails/conductor/action_mailbox/inbound_emails#edit
        rails_conductor_inbound_email GET    /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#show
                                      PATCH  /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#update
                                      PUT    /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#update
                                      DELETE /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#destroy
rails_conductor_inbound_email_reroute POST   /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format)                      rails/conductor/action_mailbox/reroutes#create
                   rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
            rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
                   rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
            update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
                 rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

正确的复数形式在 Rails 中极其重要。 resources总是复数:

Rails.application.routes.draw do
  resources :pages
end

单一资源确实存在,但它是一种不太常见的情况,我怀疑您在这里尝试做什么。

我真的不知道scope: :users来自哪里,但它的方式。

你想要的是:

<%= form_with model: @page, local: true do |form| %>
  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name %>
  <div/>
  <div class="field">
    <%= form.label :description %>
    <%= form.text_field :description %>
  <div/>
  <div class="field">
    <%= form.label :github, "GitHub" %></br>
    <%= form.text_field :github %></br>
  <div/>
  <div class="field">
    <%= form.label :website %></br>
    <%= form.text_field :website %></br></br>
  <div/>
  <%= form.submit %>
<% end %>

使用model: @page将表单绑定到在控制器中创建的模型实例。

label的第一个参数应与您出于可访问性原因标记的输入相匹配,因为这会创建正确的for=属性。 无论如何,Rails 将默认大写第一个字母。

转储<br>标签。 它不是 1999 年。使用<div>或其他一些元素对输入和标签进行分组,并使用 CSS 来设置它们的样式。

避免向提交按钮添加文本,例如<%= form.submit "Create" %> 请改用I18n 系统,因为它可以让您重复使用相同的表单来创建和更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM