【问题标题】:Rails form show extra button on iterationRails 表单在迭代时显示额外的按钮
【发布时间】:2025-11-23 12:40:01
【问题描述】:

这显示了所有的 cmets,但它还在末尾显示了一个额外的编辑和删除按钮。但是当我颠倒顺序时,我会在所有 cmets 之后显示 Add comment,这个 bug 似乎消失了。任何人都可以指出发生了什么?另外,我想就更好的编码标准提出建议。

<div class="alert alert-success">
<h3>Add Comment</h3>
<%= form_for([@article, @article.comments.build]) do |f| %>
<%= f.text_field :name, size:80 %>
<%= f.submit "Comment", class: "btn btn-primary" %>
<% end %>
</div>

<h3>Comments</h3>

<% @article.comments.each do |comment| %>
<div class="alert alert-info">
    <h4><%= comment.name %></h4>
    <table>
        <tr>
            <td><%= link_to 'Edit', [comment.article, comment], method: :put, class: "btn btn-primary" %></td>
            <td><%= button_to 'Delete', [comment.article, comment], method: :delete, class: "btn btn-danger" %></td>
        </tr>
    </table>
</div>
<% end %>

【问题讨论】:

  • 根据您的代码,行为是正确的。你想让它做什么?
  • 为什么所有的cmets都显示出来后,多了一个编辑删除按钮?
  • 因为你有他们在代码中,它显示:)
  • 它显示两个按钮以及每条评论。没关系。然后在显示所有 cmets 后,它会输出一个额外的编辑和删除按钮。为什么?
  • 你得到同样的结果?

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


【解决方案1】:

你必须像这样调整你的代码

<table>

  <% @articles.each do |article| %>
  <div class="alert alert-info">
    <tr>
      <td><h4><%= comment.name %></h4></td>
      <td><%= link_to 'Edit', [comment.article, comment], method: :put, class: "btn btn-primary" %></td>
      <td><%= link_to 'Delete', [comment.article, comment], method: :delete, class: "btn btn-danger" %></td>
    </tr>
</div>
<% end %>

</table>

同时使用link_to 而不是button_to

【讨论】: