RoR路由错误,没有路由匹配[POST]

时间:2014-07-27 07:35:04

标签: ruby-on-rails

我是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 %>

2 个答案:

答案 0 :(得分:0)

将表单助手更改为:

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

如果是默认控制器操作(文章#create)

,则无需指定URL

其他选择:

<%= form_for Article.new do |f| %>

答案 1 :(得分:0)

当你是Rails的新手时,让我给你一些想法


form_for

问题在于您使用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