我在rails包中创建。根据给定的id正确地显示所有页面和单个页面的列表。向数据库添加新记录时出现问题:没有与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
endpage_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
endroutes.rb
Rails.application.routes.draw do
resources :page
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
endnew.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
endrails路由
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发布于 2020-09-19 06:09:41
适当的复数在Rails中非常重要。resources总是复数形式:
Rails.application.routes.draw do
resources :pages
endSingular resources确实存在,但这是一个不太常见的场景,我怀疑你在这里想要做的是什么。
我真的不知道这种形式的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将表单绑定到在控制器中创建的模型实例。
由于创建了正确的for=属性,label的第一个参数应该与您出于可访问性原因标记的输入相匹配。Rails将默认大写第一个字母。
转储<br>标记。现在不是1999年。使用<div>或其他元素对输入和标签进行分组,并使用CSS设置它们的样式。
避免像<%= form.submit "Create" %>那样向submit按钮添加文本。请改用the I18n system,因为它允许您重用相同的表单来创建和更新。
https://stackoverflow.com/questions/63963281
复制相似问题