[英]Acts_As_Votable Ajax Request
试图弄清楚如何让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&unfavorite.js.erb
$('#favorite').html("<i style='color: red' class='fa fa-star'></i> Favorited");
$('#unfavorite').html("<i class='fa fa-star'></i> Favorite");
现在我有部分工作。 我有两个问题。
感谢您的帮助! 如果您需要更多代码或我不清楚某些事情,请告诉我。
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 %>');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.