首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails -没有匹配的路由[POST] "/page/new“

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

Stack Overflow用户
提问于 2020-09-19 05:53:24
回答 1查看 42关注 0票数 1

我在rails包中创建。根据给定的id正确地显示所有页面和单个页面的列表。向数据库添加新记录时出现问题:没有与POST "/ page / new“匹配的路由。这是什么原因?转到page / new后,添加表单正确显示。数据库是postgresql,我也使用Active Storage。

迁移/

代码语言:javascript
复制
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

代码语言:javascript
复制
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

routes.rb

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

new.html.erb

代码语言:javascript
复制
<%= 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

代码语言:javascript
复制
class Page < ApplicationRecord
end

rails路由

代码语言:javascript
复制
             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
EN

回答 1

Stack Overflow用户

发布于 2020-09-19 06:09:41

适当的复数在Rails中非常重要。resources总是复数形式:

代码语言:javascript
复制
Rails.application.routes.draw do
  resources :pages
end

Singular resources确实存在,但这是一个不太常见的场景,我怀疑你在这里想要做的是什么。

我真的不知道这种形式的scope: :users是从哪里来的,但它已经过时了。

你想要的是:

代码语言:javascript
复制
<%= 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将表单绑定到在控制器中创建的模型实例。

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

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

避免像<%= form.submit "Create" %>那样向submit按钮添加文本。请改用the I18n system,因为它允许您重用相同的表单来创建和更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63963281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档