我正在制作一个由“后期”模型和“评论”模型组成的董事会。
我正在制作的电路板不需要登录程序,因此删除帖子或评论时需要密码。
当我尝试删除帖子时,下面的代码效果很好。 (如果用户单击“删除”按钮,则会显示具有密码表单的隐藏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”。)
答案 0 :(得分:1)
让rails为您生成网址。目前您自己设置了网址,但未指定:id
的值,因此rails获取当前值params[:id]
尝试
form_for(comment, :method => :delete)
相反。