【问题标题】:No route matches {:action=>"edit", :controller=>"comments", :id=>nil, :ribbit_id=>"18"} missing required keys: [:id]没有路由匹配 {:action=>"edit", :controller=>"comments", :id=>nil, :ribbit_id=>"18"} 缺少必需的键:[:id]
【发布时间】:2016-01-28 12:12:43
【问题描述】:

这是路由文件:

resources :ribbits do
  resources :comments
end

这是 cmets_controller.rb edit 操作:

def edit
  @ribbit = Ribbit.find(params[:ribbit_id])
  @comment = @ribbit.comments.find(params[:id])
  redirect_to @user unless @user == current_user
end

这就是视图:

<% @ribbit.comments.each do |comment| %>
  <div class="comment">
    <% comment_user = comment.user%>
    <img src="<%= comment_user.avatar_url unless comment_user.blank?%>">
    <%= comment.user.name if comment.user %>
    <p>
      <%= comment.body if comment %>
    </p>
    <%= link_to "Edit", edit_ribbit_comment_path(@ribbit, comment) %>
  </div>
<% end %>

我收到错误:

没有路由匹配 {:action=>"edit", :controller=>"cmets", :id=>nil, :ribbit_id=>"18"} 缺少必需的键:[:id]

不胜感激!

【问题讨论】:

  • 请不要更改问题的原始上下文!
  • 如果您在 Pavan 回答后更改了问题,您应该接受 Pavan 的回答并提出新问题。
  • @RichPeck,不知道,因为我是在这里注册的第一天。现在我知道了主要规则。谢谢。

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

没有路由匹配 {:action=>"edit", :controller=>"cmets", :id=>nil, :ribbit_id=>"18"} 缺少必需的键:[:id]

你需要改变

<%= link_to "Edit", edit_ribbit_comment_path(@ribbit) %>

<%= link_to "Edit", edit_ribbit_comment_path(@ribbit, comment) %>

您的route 需要:id:ribbit_id 作为必需的键。因为:idnil,所以错误也是。

【讨论】:

  • 已更改为 edit_ribbit_comment_path(@ribbit, comment)。我得到同样的错误
  • @RomanKanafotskiy, &lt;%= link_to "Edit", edit_ribbit_comment_path(comment, @ribbit) %&gt;
  • @pavan 翻转这两个对象
  • @pavan 现在它给了我这个:No route matches {:action=&gt;"edit", :controller=&gt;"comments", :id=&gt;"18", :ribbit_id=&gt;nil} missing required keys: [:ribbit_id] 在我翻转后
  • @RomanKanafotskiy 视图文件的名称和映射到的操作是什么?
【解决方案2】:

问题在于您的 Rabbit Controller Action。

在您的Show 操作中,您正在为rabit 创建一个新的comment 这个新创建的评论没有保存在数据库中,因此还没有 ID。因此,在您看来,此评论没有任何 ID。

我不知道您为什么要创建此评论,如果您需要它,那么您应该检查 Edit 链接,如果记录已创建,则创建链接。因为这对编辑尚未创建的记录毫无意义。

这样就可以了

<%= link_to "Edit", edit_ribbit_comment_path(@ribbit, comment) unless comment.new_record?%>

【讨论】:

  • 完美运行。感谢您抽出宝贵时间回答问题!
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
相关资源
最近更新 更多