我需要一个帮助。使用ROR发布表单数据时出现以下错误。
No route matches [POST] "/articles/new"
Rails.root: C:/Sites/blog
Application Trace | Framework Trace | Full Trace
Routes
Routes match in priority from top to bottom
Helper HTTP Verb Path Controller#Action
Path / Url
articles_path GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article_path GET /articles/new(.:format) articles#new
edit_article_path GET /articles/:id/edit(.:format) articles#edit
article_path GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#up
我正在解释下面的代码。
new.html.erb:
<%= form_for @article do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
date
当用户提交此表单时,会出现这类错误。我的route.rb
文件位于下方。
Rails.application.routes.draw do
resources :articles
root 'welcome#index'
end
我的控制器文件代码如下所示。
class ArticlesController < ApplicationController
def new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
end
我使用的是Rails版本4.2...
。请帮我解决此错误。
答案 0 :(得分:0)
默认的Rails new
操作为GET /articles/new
,但默认的create
操作为POST /articles
(最后没有/new
);您的表单会以某种方式提交到错误的网址。
为了快速重新创建此场景,我将以下内容输入终端:
rails new blog
cd blog
rails generate scaffold articles
rake db:migrate
rails s
...使用以下def new
方法创建了一个Articles控制器:
# GET /articles/new
def new
@article = Article.new
end
我在浏览器中导航到http://127.0.0.1:3000/articles
,然后点击&#34;新文章&#34;然后&#34;创建文章&#34 ;;没有发生错误。
但是,从@article = Article.new
删除def new
行(以匹配您问题中的控制器代码)会导致以下错误出现在&#34;新文章&#34;页:
ArgumentError in Articles#new
First argument in form cannot contain nil or be empty
Extracted source (around line #1): <%= form_for(@article) do |f| %>
我不确定你是如何设法远远看到No route matches [POST] "/articles/new"
消息的,但我想象缺少的@article = Article.new
行与它有关。
答案 1 :(得分:-1)
您可以通过添加:
来实现此目的def new
@article = Article.new
end