Ruby on rails Rails 4路由错误-没有与[POST]匹配的路由/类别/新;

Ruby on rails Rails 4路由错误-没有与[POST]匹配的路由/类别/新;,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,在学习Rails 4时,我在尝试将类别添加到我的简单博客的帖子时遇到了问题。我已经生成了模型,运行了迁移并添加了一个控制器。无论我现在在尝试创建一个类别时做了什么,我总是遇到同样的错误:没有与[POST]匹配的路由,这很奇怪,因为我似乎已经准备好了所有的代码。请帮忙 类别控制器 class CategoriesController < ApplicationController def index @categories = Category.all end

在学习Rails 4时,我在尝试将类别添加到我的简单博客的帖子时遇到了问题。我已经生成了模型,运行了迁移并添加了一个控制器。无论我现在在尝试创建一个类别时做了什么,我总是遇到同样的错误:没有与[POST]匹配的路由,这很奇怪,因为我似乎已经准备好了所有的代码。请帮忙

类别控制器

class CategoriesController < ApplicationController

    def index
      @categories = Category.all
    end

    def new
      @category = Category.new
    end

    def create
      @category = Category.new(category_params)

        @category.save
        redirect_to new_category_path, alert: "Category created!"
    end

    def show
      @category = Category.find(params[:id])
    end

    def destroy
      @category = Category.find(params[:id])
      @category.destroy

      redirect_to categories_path
    end


  private
        def category_params
            params.require(:category).permit(:name)
        end

end
category.rb

class Category < ActiveRecord::Base
    validates :name, presence: true
    has_many :posts
end

你应该有自己的看法

<%= form_for @category do |f| %>
  <p>
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </p>

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



@category
对象由
form\u用于
方法来计算表单url


如果只将
Symbol
传递给
form\u以获得
method,而没有明确指定
url
,则生成的表单中url为当前url

尽管
@category
有效,但如果你进一步阅读,你会发现它们会解释为什么你的代码发送
没有与[POST]“/categories/new”匹配的路由

该指南实际上解释了需要为表单指定
url:posts\u path
,以便使用正确的路由

但是这个表单有一个问题。如果您检查HTML 这是通过查看页面的源代码生成的,您将看到 表单的action属性指向/posts/new。这 这是一个问题,因为这条路线指向您所在的页面 此时此刻,该路线应仅用于显示 新职位的申请表

表单需要使用不同的URL才能转到其他地方。 这可以非常简单地通过form_for的:url选项完成。 通常在Rails中,用于提交新表单的操作 这样就叫做“创建”,所以表单应该指向 这一行动

编辑app/views/posts/new.html.erb内部行的表单_以查看 像这样:

<%= form_for :post, url: posts_path do |f| %> 

在本例中 posts\u路径帮助器被传递到:url选项。Rails可以做什么 这样,它将把表单指向 当前控制器、PostsController和将发送POST请求 去那条路线


你能添加整个回溯吗?太棒了。非常感谢。在begginer教程中,他们在表单中使用:符号。你们能解释一下为什么吗?谢谢你们。我猜太多的信息淹没了我的大脑容量。
No route matches [POST] "/categories/new"
<%= form_for @category do |f| %>
  <p>
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </p>

  <p>
    <%= f.submit %>
  </p>
<% end %>
<%= form_for :post, url: posts_path do |f| %>