我正在制作一个由“post”模型和“comment”模型组成的板。
我做的板子不需要登录程序,所以删除帖子或评论需要密码。
当我尝试删除帖子时,下面的代码运行良好。(如果用户点击“删除”按钮,会出现隐藏的带有密码表单的DIV,所以我使用了form_for。)
<%= link_to_function "Delete", "$('#post_password_box').toggle()" %> |
<div id="post_password_box">
<%= form_for(@post, url: { action: "destroy"}, html: { method: :delete, class: nil, id: nil}) do |f| %>
<%= f.label :password %>
<%= f.password_field :password %><br>
<%= f.submit "Commit", class: "btn", data: { confirm: "Are you sure?" } %>
<%= button_to_function "Cancel", "$('#post_password_box').hide()", class: "btn" %>
<% end %>
</div>
所以,我在删除评论时使用了类似的代码。
<% @comments.each do |comment| %>
<li class="author"><%= comment.author %></li>
<li class="content"><%= comment.content %></li>
<li class="date"><%= comment.created_at.localtime.strftime("%r") %></li>
<li class="button">
<%= link_to_function "X", "$(this).next().toggle()" %>
<div class="comment_password_box">
<%= form_for(comment, url: {controller: "comments", action: "destroy"}, html: {method: :delete, class: nil, id: nil}) do |f| %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit %>
<% end %>
</div>
</li>
<% end %>
乍一看,上面的代码似乎运行良好,但存在代码没有删除正确注释的问题。
例如,如果一个帖子的 id 是 20,而我要删除的评论的 id 是 10,它会删除 id 为 20 的评论。
我发现问题出在表单标签的动作属性在每条评论中都如下所示。
<form accept-charset="UTF-8" action="/comments/20" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="delete" /><input name="authenticity_token" type="hidden" value="Y2oBuoIxa+9yPLC5WflKVVELw3jgKsi9s9/8Cfvr2u8=" /></div>
我应该怎么做才能让 rails 找到正确的表单标签的 action 属性值?(在这种情况下,它应该是“/comments/10”,而不是“/comments/20”。)