したがって、私が抱えている問題は、RubyonRailsアプリで「いいね」/「嫌い」ボタンをajaxで更新することです。コードは次のとおりです。
app / views / _comment.html.haml
- likes = comment.likes
%div.comment{id: "comment-#{comment.id}"}
.comment-avatar
.medium-user-avatar.avatar-canvas
- if comment.user.avatar_url
= image_tag comment.user.avatar_url(:medium)
- else
%span.medium-user-initials.initials-decoration
= comment.user.avatar_initials
%span.comment-username= link_to(comment.user_name, "#")
%span.comment-body~ markdown(comment.body)
.comment-time
= time_ago_in_words(comment.created_at) + " ago"
- if can? :like, comment
= " · "
- if likes.find_by_user_id(current_user.id).nil?
= link_to "Like", like_comment_path(comment), method: :post, remote: true
- else
= link_to "Unlike", unlike_comment_path(comment), method: :post, remote: true
- if comment.user == current_user
= " · "
= link_to "Delete", comment_path(comment), method: :delete, remote: true,
:data => { :confirm => "Are you sure you want to delete this comment?" }
- if likes.count > 0
.comment-likes
- likers = likes.map { |like| link_to(like.user_name, "#") }
- if likers.length > 1
- likers = likers.slice(0, likers.length - 1).join(", ").concat(" and " + likers.slice(-1))
- else
- likers = likers[0]
= "Liked by #{likers}".html_safe
app / controllers / comments_controller.rb
class CommentsController < BaseController
load_and_authorize_resource
def destroy
destroy!{ discussion_url(resource.discussion ) }
end
def like
comment_vote = resource.like current_user
Event.comment_liked!(comment_vote)
#redirect_to discussion_url(resource.discussion )
render :partial => "like"
comment_likes
end
def unlike
resource.unlike current_user
#redirect_to discussion_url(resource.discussion)
render :partial => "unlike"
comment_likes
end
def comment_likes
render :partial => "comment_likes"
end
end
次に、like、like、comment_likesの.js.erbファイル:
app / views / _like.js.erb
$(".comment-time a#like").html("<%= escape_javascript(render('.comment-time a#like'")
app / views / _unlike.js.erb
$(".comment-time a#unlike").html("<%= escape_javascript(render('.comment-time a#unlike'")
app / views / _comment_likes.js.erb
$(".comment-likes a##").html("<%= escape_javascript(render('.comment-likes a##'")
現在、「いいね」をクリックするとデータベースが更新されますが、ページが更新されるまで変更は表示されません。個々のdivをajaxで更新したいだけです。divに関するもう少し情報が役立つと、rubyがhtmlを作成し、それに含まれます。例として、またはすでに気に入った場合は、これらのdivを更新して、データベースからの最新情報とhttp://localhostを含むものを表示する必要があります。 :3000/コメント/7 / 500(内部サーバーエラー)とは異なります。」
それが重要な場合、残りのスクリプトはCoffeescriptで実行されていますか?コントローラー関数は.js.erbを使用する必要があることを読みましたので、これがすべてに影響を与えないことを願っています。(私のjs.erbが間違っていると確信しています)