我已经在我的应用程序上创建了一个相似的按钮来喜欢帖子,但是我希望在不刷新页面的情况下,类似的附加在计数上看到de +1,“have”按钮是否被填满。我尝试了以下代码,但我有以下错误:
jquery.self-bd7ddd3….js?body=1:10255 PUT http://localhost:3000/posts/12/like 500 (Internal Server Error)这是我的_posts.html.erb文件:
<div class="vote-rv">
<% if current_user.liked? post %>
<%= link_to "", dislike_post_path(post), class: "dislike fa fa-heart", method: :put, remote: true %>
<% else %>
<%= link_to "", like_post_path(post), class: "like fa fa-heart-o", method: :put, remote: true %>
<% end %>
<span class="badge" data-id="<%= post.id %>"><%= post.get_likes.size %></span>
</div>这是我的routes.rb
resources :travels, :shallow => true do
# Posts
resources :posts do
member do
put "like" => "posts#like"
put "dislike" => "posts#dislike"
end
end
end这是我的posts_controller.rb (喜欢和不喜欢的方法)
def like
@post.like_from current_user
respond_to do |format|
format.html { redirect_to :back }
format.json { head :no_content }
format.js { render :layout => false }
end
end
def dislike
@post.dislike_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.json { head :no_content }
format.js { render :layout => false }
end
end知道问题出在哪里了吗?
谢谢!
发布于 2016-12-05 22:24:58
您需要包含两个js.erb文件,一个名为like.js.erb,另一个称为dislike.js.erb,它们响应控制器中类似的和不喜欢的方法。
下面是like.js.erb ajax文件的一个示例。在视图/帖子下面,与您的_posts.html.erb文件位于同一个文件夹中:
$('.like').bind('ajax:success', function() {
$('<%= post.id %>').html('<%= escape_javascript post.get_likes.size %>');
$('#like_<%= post.id %>').removeClass('fa-heart-o').addClass('fa-heart');
});对于dislike.js.erb文件,您需要做类似的事情,但切换类名,并将post.get_likes.size更改为post.get_dislikes.size,并在视图中添加该行,如果您确实希望看到不喜欢计数的话。
您还需要向类似的视图添加一个ID,这样ajax的心脏改变就可以正常工作了:
<%= link_to "", like_post_path(post), id: "like_<%= post.id %>", class: "like fa fa-heart-o", method: :put, remote: true %>将喜欢和不喜欢的方法更改为:
@post.liked_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js
end
@post.disliked_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js
endhttps://stackoverflow.com/questions/40982483
复制相似问题