Ruby on rails Rails 4路由错误-没有与[POST]匹配的路由/类别/新;
在学习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
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| %>