我是Rails的初学者,这是rails指南博客应用。提交表格后我得到没有路线匹配[POST]" / articles / new" 这很奇怪,因为从下面的路线可以看出,文章/新的没有'有一个帖子。
控制器文件:
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
def show
@article = Article.find(params[:id])
end
private
def article_params
params.require(:article).permit(:title, :text)
end
路由文件:
Rails.application.routes.draw do
get 'welcome/index'
root 'welcome#index'
resources :articles
路线:
Prefix Verb URI Pattern Controller#Action
welcome_index GET /welcome/index(.:format) welcome#index
root GET / welcome#index
articles GET /articles(.:format) articles#index
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
[编辑]这里的表格也是
<%= form_for :article, url: articles_path 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 %>
答案 0 :(得分:0)
将表单助手更改为:
<%= form_for @article do |f| %>
如果是默认控制器操作(文章#create)
,则无需指定URL其他选择:
<%= form_for Article.new do |f| %>
答案 1 :(得分:0)
当你是Rails的新手时,让我给你一些想法
问题在于您使用form_for
form_for
基本上是从ActiveRecord对象创建一个表单 - 允许您填充各种属性&amp;用标准方法对象的其他元素。
部分原因是为表单创建url
组件,该组件将根据对象的model_name
属性构建。通常,您将使用纯ActiveRecord对象填充form_for
;但是,由于您刚刚使用了符号,因此在查找不存在的对象中的url
时会出现问题:
-
<强>修正强>
解决此问题的方法是使用ActiveRecord对象填充form_for
:
<%= form_for @article do |f| %>
您已经为此完成了大多数工作 - 在您的控制器中,您必须在@article
和{{1}中声明new
变量动作:
create