我已经有好几天这个问题而且无法弄明白......我已经'喜欢'和'不像'按钮。当用户喜欢"一个帖子,更新应该发生在数据库中,然后按钮应该翻转到"不像"。一切都在后端工作 - 数据库更新很好,但按钮永远不会从" Like" "与"不同。如果我手动刷新页面,它将被切换,但没有刷新就不会发生。我没有记录任何错误或在控制台中。
共享/ _like.html.erb
<%= form_for(current_user.likes.build, remote: true) do |f| %>
<div><%= hidden_field_tag :post_id, post.id %></div>
<%= f.submit "Like", class: "btn btn-primary" %>
<% end %>
共享/ _unlike.html.erb
<%= form_for(current_user.likes.find_by_post_id(post.id),
html: {method: :delete },
remote: true) do |f| %>
<%= f. submit "Unlike", class: "btn" %>
<% end %>
通过以下方式呈现: 交/ _post.html.erb
<div id="like_form">
<% if post.does_user_like(post.id, current_user.id) %>
<%= render 'shared/unlike', :post => post %>
<% else %>
<%= render 'shared/like', :post => post %>
<% end %>
</div>
喜欢/ create.js.erb
$("#like_form").html("<%= escape_javascript(render('shared/unlike', :post => @post)) %>");
喜欢控制器
def create
user = current_user
post = post.find(params[:post_id])
@post = post
Like.create(post_id: post.id, user_id: user.id)
respond_to do |format|
format.html { redirect_to request.referrer || root_url }
format.js
end
end
答案 0 :(得分:0)
在replaceWith
html
代替likes/create.js.erb
答案 1 :(得分:0)
我已经找到了问题:这里的代码:
<div id="like_form">
<% if post.does_user_like(post.id, current_user.id) %>
<%= render 'shared/unlike', :post => post %>
<% else %>
<%= render 'shared/like', :post => post %>
<% end %>
</div>
实际上是帖子的提要 - 所以每页有很多帖子。问题是代码实际上工作正常,但它更新了页面上的第一篇文章,而不是正确的帖子。我通过在每个div上添加和id解决了这个问题:
<div id="like_form-<%=post.id %>">
<% if post.does_user_like(post.id, current_user.id) %>
<%= render 'shared/unlike', :post => post %>
<% else %>
<%= render 'shared/like', :post => post %>
<% end %>
</div>
在这里调用特定的div:
$("#like_form-<%=@post.id %>").html("<%= escape_javascript(render('shared/unlike', :post => @post)) %>")