Ruby on rails 没有路由匹配{:action=>;“show";,:controller=>;“posts";}缺少必需的键:[:id]

Ruby on rails 没有路由匹配{:action=>;“show";,:controller=>;“posts";}缺少必需的键:[:id],ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我正在用\u表单:处理这一行,这给了我一个错误: No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id] 请记住,在我的路线中我有:资源:blog,controller:'posts',也就是说我正在使用posts MVC,但我希望路线中的/posts/被/blog/取代 posts\u控制器 def new @post = Post.new end

我正在用\u表单
处理这一行,这给了我一个错误:

No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]
请记住,在我的路线中我有:
资源:blog,controller:'posts'
,也就是说我正在使用posts MVC,但我希望路线中的/posts/被/blog/取代

posts\u控制器

  def new
    @post = Post.new
  end

  def edit
  end
当我转到
edit
,但不创建
new
时,\ u表单工作

路线

           blog_index GET    /blog(.:format)                                                     posts#index
                      POST   /blog(.:format)                                                     posts#create
             new_blog GET    /blog/new(.:format)                                                 posts#new
            edit_blog GET    /blog/:id/edit(.:format)                                            posts#edit
                 blog GET    /blog/:id(.:format)                                                 posts#show
                      PATCH  /blog/:id(.:format)                                                 posts#update
                      PUT    /blog/:id(.:format)                                                 posts#update
                      DELETE /blog/:id(.:format)                                                 posts#destroy

model_path
默认情况下,Rails中的路由逻辑会导致
blog\show
=>
/blogs/:id

将其更改为
blogs\u path

看着你们的路线,我看到明显的命名冲突,你们一定是把路线定义错了

请确保它看起来像
resources:posts,:as=>“blogs”
,都是复数形式

UPD 如果您只想拥有一个博客,那么
resource:post,:as=>“blog”
,两者都是单数


但这意味着一个实际的投入。我很肯定你说的是
blog/post1
blog/post2
,否则我觉得称它为blog没有任何意义

model_path
默认情况下,Rails中的路由逻辑会导致
blog\show
=>
/blogs/:id

将其更改为
blogs\u path

看着你们的路线,我看到明显的命名冲突,你们一定是把路线定义错了

请确保它看起来像
resources:posts,:as=>“blogs”
,都是复数形式

UPD 如果您只想拥有一个博客,那么
resource:post,:as=>“blog”
,两者都是单数

但这意味着一个实际的投入。我很肯定你说的是
blog/post1
blog/post2
,否则我觉得称它为blog没有任何意义

对不起,我的英语

在这一行中,您将重定向表单以显示(blog\u路径) 但是,根据路线的不同,该节目需要一个id(blog-GET/blog/:id(:format))

您必须在控制器中创建一个“create”方法来接收参数

您还可以使用另一种方法:rails生成scaffold\u控制器帖子

这将生成完整的CRUD,因此您只需配置参数

我希望这能帮助你

对不起,我的英语

在这一行中,您将重定向表单以显示(blog\u路径) 但是,根据路线的不同,该节目需要一个id(blog-GET/blog/:id(:format))

您必须在控制器中创建一个“create”方法来接收参数

您还可以使用另一种方法:rails生成scaffold\u控制器帖子

这将生成完整的CRUD,因此您只需配置参数


我希望这对你有所帮助

我这样做到了两全其美:

resources :blog, to: 'posts'
resources :posts

我通过这种方式获得了两个世界的最佳结果:

resources :blog, to: 'posts'
resources :posts


为什么要将帖子提交给博客控制器?同样的错误@KMRakibulIslam:(@BroiSatse我没有提交给博客控制器。我提交给帖子控制器。没有博客控制器、模型、视图等。都是帖子。我只使用“blog”对于routes insteadSame error@KMRakibulIslam。感谢您尝试。@AnthonyGalli.com通过指定
url:blog\u path
,您将表单指向
posts\show
,这是您永远不应该做的。假设您想点击
创建
操作,您应该使用
blogs\u path
。不确定
的默认值是否简单_表单
:post
,如果不是,请添加
方法::post
。为什么要将帖子提交给博客控制器?同样的错误@KMRakibulIslam:(@BroiSatse我没有提交给博客控制器。我提交给博客控制器。没有博客控制器、模型、视图等。我只使用“blog”对于routes insteadSame error@KMRakibulIslam。感谢您尝试。@AnthonyGalli.com通过指定
url:blog\u path
,您将表单指向
posts\show
,这是您永远不应该做的。假设您想点击
创建
操作,您应该使用
blogs\u path
。不确定
的默认值是否简单_表单
:post
,如果不是,请添加
方法::post
。我得到
未定义的局部变量或方法“blogs\u path”
@AnthonyGalli.com,提供
rake路由
输出良好呼叫。更新question@AnthonyGalli.com,你的资源看起来像我更新的吗?都是复数吗?是的,这是关键,确保复数
资源的
匹配
:blogs
。我得到
未定义的局部变量或方法“blogs\u path”
@AnthonyGalli.com,提供
rake路由
输出良好呼叫。更新question@AnthonyGalli.com,你的资源看起来像是我更新的吗?都是复数吗?是的,这是关键,确保多个
资源
:博客的匹配。