我已经在我的应用程序中创建了一个喜欢帖子的喜欢按钮,但是我希望在没有刷新页面的情况下追加,看看计数上的de +1和" hearth"按钮是否填充。我尝试了以下代码,但是我有这个错误:
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
知道问题是什么?
谢谢!
答案 0 :(得分:0)
您需要包含两个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
end