【问题标题】:No route matches missing required key没有路线匹配缺少必需的键
【发布时间】:2018-04-14 12:09:57
【问题描述】:

我是 Ruy on Rails 的新手,我得到这个 No route matches missing required keys: [:id] 错误,我不知道如何修复它。我已经尝试过与我类似的解决方案,但没有任何效果。

这是我的模型

class Hall < ActiveRecord::Base
        belongs_to :user
        has_many :fields
        has_many :comments
        end


class Comment < ActiveRecord::Base
      belongs_to :hall
      belongs_to :user
end

class User < ActiveRecord::Base      
    has_many :halls
    has_many :comments
end

我的路线

  devise_for :users
  resources :halls do
  resources :fields 
  resources :comments
  end

以及错误所在的_comment.html.erb文件

<p><%=comment.content %></p>

<%= link_to "Edit", edit_hall_comment_path(comment.hall, comment) %>  <-- error

这是我得到的错误

No route matches {:action=>"edit", :controller=>"comments", :hall_id=>"1", :id=>nil} missing required keys: [:id]

【问题讨论】:

  • 看起来您正在尝试edit 一个尚未保存到数据库的对象?你不能 edit 在数据库中持久化之前的东西。
  • 感谢您的回答,但我认为这里不是这种情况,因为如果我删除导致错误的行,我可以发表评论,然后在大厅展示页面中呈现。
  • 你在循环所有的 cmets 对吗?你能发布整个循环吗?
  • 如果您发表评论,那么这保存它。您的错误是因为评论尚未保存(即comment.id == nil),并且您正在尝试渲染路线以对其进行编辑。 Rails 无法生成路径来编辑尚不存在的内容。
  • 在没有看到更多上下文的情况下,我不确定您在这里实际尝试做什么。也许_comment.html.erb 被用于多种用途,其中一些没有意义?

标签: ruby-on-rails ruby routes


【解决方案1】:

你的错误显然是试图访问没有 id 的编辑路径。你可能想看看https://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if

或者只是使链接有条件。如果未持久对象上没有 ID,则编辑路径助手将不起作用。

<%= link_to "Edit", edit_hall_comment_path(comment.hall, comment) if comment.id %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多