ruby-on-rails - Rails - 没有路线匹配 [POST] "/page/new"
问题描述
我在 Rails 投资组合中创建。根据给定的 id 显示所有页面和单个页面的列表可以正常工作。向数据库添加新记录时出现问题: No route matches [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
路线.rb
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 %>
模型/page.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 系统,因为它允许您重复使用相同的表单来创建和更新。
推荐阅读
- reactjs - 如何使用 Typescript 向 state 添加新值?
- ios - 将本机 html 反应为 pdf
- apache-nifi - 如何将外部 jar 添加到 nifi 集群?
- r - 付费计划闪亮:错误 - “应用程序无法启动:正常退出,代码 137,信号 9 (SIGKILL)”
- sql-server - 跳过或运行由变量 T-SQL 确定的代码行
- kubernetes - Prometheus 从 GKE 中的 kubernetes api 获得 403 禁止
- r - 将闪亮的应用程序包装在一个包中
- android - Firebase 实时数据库 - 如何将来自多个活动的数据存储在同一个子元素下?
- filenet-process-engine - FileNet 工作流 - 将 F_Subject 设置为初始附件的名称
- javascript - 当条件为真时,在 JSON 中推送一个稍微改变的字符串