试图弄清楚如何让ajax使用我的Acts_As_Votable按钮。
这就是我现在所拥有的。
post_controller.rb
def favorite
@post = Post.find(params[:id])
@post.upvote_from current_user
respond_to do |format|
format.js
end
end
def unfavorite
@post = Post.find(params[:id])
@post.unvote_by current_user
respond_to do |format|
format.js
end
end
_post.html.erb
<% if current_user.voted_on? post %>
<%= link_to '<i style="color: red" class="fa fa-star"></i> Favorited'.html_safe, unfavorite_post_path(post), method: :put, remote: true, id: "unfavorite" %>
<% else %>
<%= link_to '<i class="fa fa-star"></i> Favorite'.html_safe, favorite_post_path(post), method: :put, remote: true, id: "favorite" %>
<% end %>
favorite.js.erb&amp; unfavorite.js.erb
$('#favorite').html("<i style='color: red' class='fa fa-star'></i> Favorited");
$('#unfavorite').html("<i class='fa fa-star'></i> Favorite");
现在我已经部分工作了。我有两个问题。
谢谢你的帮助!如果您需要更多代码或我不清楚某些事情,请告诉我。
答案 0 :(得分:2)
id
在一个页面中必须是唯一的。您应该可以将post.id
附加到您的链接:
<强> _post.html.erb 强>
<% if current_user.voted_on? post %>
<%= render 'unfavorite_link', post: post %>
<% else %>
<%= render 'favorite_link', post: post %>
<% end %>
<强> _favorite_link.html.erb 强>
<%= link_to '<i class="fa fa-star"></i> Favorite'.html_safe, favorite_post_path(post), method: :put, remote: true, id: "favorite-#{post.id}" %>
<强> _unfavorite_link.html.erb 强>
<%= link_to '<i style="color: red" class="fa fa-star"></i> Favorited'.html_safe, unfavorite_post_path(post), method: :put, remote: true, id: "unfavorite-#{post.id}" %>
除了仅使用AJAX设置html
,您可以使用replaceWith
替换整个链接,而不仅仅是内部HTML:
<强> favorite.js.erb 强>
$('#favorite-<%= @post.id %>').replaceWith('<%= escape_javascript render 'unfavorite_link', post: @post %>');
<强> unfavorite.js.erb 强>
$('#unfavorite-<%= @post.id %>').replaceWith('<%= escape_javascript render 'favorite_link', post: @post %>');