AJAXに関しては全くの初心者で、少し助けが必要です。私は posts_controller と likes_controller を持っています:
ユーザーは投稿に「いいね」または「いいね」を付けることができます。現在、私は AJAX を実装して、ユーザーが投稿を「いいね」するか投稿を「いいね」しないたびにいいね/いいねが切り替わるようにしようとしています。
AJAX の前は、ページが更新され、ビュー内のコードが特定の投稿が現在のユーザーに気に入られたかどうかを判断していました。ビューで if ステートメントを実行したところ、結果に応じて 2 つの異なるフォームが表示されました。投稿がまだいいねされていない場合は、投稿を「いいね」するためのフォーム (作成アクション) と、投稿が既にいいねされている場合です。いいね、投稿を「アンいいね」するフォーム(アクションを破棄)がありました。
AJAX を使用して create パーツを実装したので、like は動的に発生しますが、ビューは変わりません (like はターミナル/レール コンソール経由で作成されていることがわかりますが、リンクのテキストは同じままです)。ページを更新せずにビューを更新する最善の方法を教えてください。AJAX経由でいいねが発生したら、「いいね」リンクとフォームを「いいね」リンクとフォームで更新する必要があります。jquery経由でこれを行う唯一の方法はありますか?
これが私のコードです:likes_controller
class LikesController < ApplicationController
def create
@post = Project.find(params[:like][:likee_id])
respond_to do |format|
format.html{
current_profile.like!(@post)
redirect_to :back
}
format.js {
current_profile.like!(@post)
}
end
end
def destroy
@post = Like.find(params[:id]).likee
current_profile.unlike!(@post)
redirect_to :back
end
end
ビューのスニペット:
%ul.dropdown-menu
%li
- if current_profile.like?(post)
= form_for current_profile.likes.find_by_likee_id(post), :html => { :method => :delete } do |f|
%a{:href => "javascript:void(0)", :onclick=>"$(this).closest('form').submit()"}
%i.icon-heart.icon-large{:style => "color: #fedc73;"}
Unlike this Post
- else
= form_for current_profile.likes.build(:likee_id => post.id), :remote => true do |f|
= f.hidden_field :likee_id
%a{:href => "javascript:void(0)", :onclick=>"$(this).closest('form').submit()"}
%i.icon-heart-empty.icon-large
Like this Post
create.js.haml ファイル:
:plain
$(this).closest('form').submit()
どんな助けでも大歓迎です。どうもありがとう!