Rails 5 教程入门,没有路由匹配 [POST] “/articles/new”,

Getting Started with Rails 5 tutorial, No route matches [POST] "/articles/new",

我正在学习本教程:Rails http://guides.rubyonrails.org/getting_started.html

入门

我在堆栈上搜索:没有路由匹配 [POST] “/articles/new” No route matches [POST] "/articles/new" 并且建议的拼写更正对我的错误没有帮助。

你可以找到我的 git: https://github.com/tomile/rails5Blog/tree/adding-partial.

routes.rb

Rails.application.routes.draw do
  resources :articles
  get 'welcome/index'
  root 'welcome#index'
end

articles_controller.rb

def create
    @article = Article.new(article_params)

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

_form.html.erb(没有复制粘贴整个文件)

<%= form_for :article do |f| %>

...

  <p>
    <%= f.submit %>
  </p>
<% end %>

new.html.erb

<h1>New Article</h1>

<%= render 'form' %>

<%= link_to 'Back', articles_path %>

$rake 路线

           Prefix Verb   URI Pattern                  Controller#Action
         articles GET    /articles(.:format)          articles#index
                  POST   /articles(.:format)          articles#create
      new_article GET    /articles/new(.:format)      articles#new
                  POST   /articles(.:format)          articles#create
      new_article GET    /articles/new(.:format)      articles#new
     edit_article GET    /articles/:id/edit(.:format) articles#edit
          article GET    /articles/:id(.:format)      articles#show
                  PATCH  /articles/:id(.:format)      articles#update
                  PUT    /articles/:id(.:format)      articles#update
                  DELETE /articles/:id(.:format)      articles#destroy

首先,新路由是 GET 类型的。 第二件事是,当我们使用 form_for 时,我们为其提供了一个实例。

所以在你的文章控制器中

def new
  @article = Article.new
end

然后在表格中使用

<%= form_for @article do |f| %>

它将表单动作指向文章的创建方法。

你漏掉了一步教程。 您必须将表格的第一行更改为以下内容:

<%= form_for :article, url: articles_path do |f| %>

之后表格就可以正常工作了。