【问题标题】:No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]没有路线匹配 {:action=>"show", :controller=>"posts"} 缺少必需的键:[:id]
【发布时间】:2015-12-17 00:26:16
【问题描述】:

我在 _form 中遇到了这一行:<%= simple_form_for(@post, url: blog_path) do |f| %>,这给了我错误:

No route matches {:action=>"show", :controller=>"posts"} missing required keys: [:id]

请记住,在我的路线中,我有:resources :blog, controller: 'posts',也就是说我正在处理帖子 MVC,但我希望 /posts/ 被 /blog/ 替换在路线中。

posts_controller

  def new
    @post = Post.new
  end

  def edit
  end

当我转到edit 时,_form 可以工作,但不能创建new

路线

           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

【问题讨论】:

  • 为什么要向博客控制器提交帖子?
  • 同样的错误@KMRakibulIslam :(
  • @BroiSatse 我没有提交给博客控制器。我正在提交给posts_controller。没有博客控制器、模型、视图等。都是帖子。我只是使用“博客”来代替路线
  • 同样的错误@KMRakibulIslam。感谢您的尝试。
  • @AnthonyGalli.com 通过指定url: blog_path,您将表单指向posts#show,这是您永远不应该这样做的。假设您想点击您的create 操作,您应该使用blogs_path。不确定simple_form 的默认值是否为:post,如果不是,请添加method: :post

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

model_path 在 Rails 中默认路由逻辑导致blog#show => /blogs/:id

将其更改为blogs_path

查看你的路由,我看到明显的命名冲突,你一定是定义了路由错误。

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

UPD 如果你只想拥有一个博客,那么resource :post, :as=>"blog",都是单数。

但这意味着一个实际的输入。我很确定你说的是blog/post1blog/post2,否则我看不出叫它博客有什么意义?

【讨论】:

  • 我收到undefined local variable or method 'blogs_path'
  • @AnthonyGalli.com,提供rake routes 输出
  • 好电话。更新问题
  • @AnthonyGalli.com,你的资源看起来像我更新了吗?都是复数吗?
  • 是的,这是关键,确保resources的复数与:blogs的复数匹配。
【解决方案2】:

对不起我的英语...

<%= simple_form_for(@post, url: blog_path) do |f| %> 在这一行中,您将表单重定向到显示 (blog_path) 但是,根据路线,节目需要一个 id (blog GET /blog/:id(.:format))

你必须在接收参数strong的控制器中创建一个“create”方法...

您可以使用另一种方法:rails generate scaffold_controller 帖子

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

希望对你有帮助

【讨论】:

    【解决方案3】:

    这样我两全其美:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多