上記のナビゲーション、メイン コンテンツ、サイド メニューの 3 つの部分で構成される Rails アプリがあります。
メインコンテンツにフォロー解除ボタンを実装しました。
これまでのところ、Ajax と完全に連携しています。
基本的にフォローボタンを押すと、users_controller.rbのフォローアクションが呼び出され、フォローフラグが変更され、フォローボタンを部分的に再レンダリングするためにfollow.jsが呼び出されます。
それに加えて、サイドメニューには current_user がフォローしている人数が表示されます。
この数値も、フォロー アクションが実行された直後に更新する必要があります。
一度に 2 つ以上のパーシャルを更新するには。これをアーカイブするにはどうすればよいですか?
コントローラー/users_controller.rb
....
def follow
@user = User.find(params[:id])
current_user.follow(@user)
respond_to do |format|
format.js {render :action=>"follow.js"}
end
end
def unfollow
@user = User.find(params[:id])
current_user.stop_following(@user)
respond_to do |format|
format.js {render :action=>"unfollow.js"}
end
end
...
ビュー/ユーザー/follow.js.erb
$('.follow_user[data-user-id="<%=@user.id%>"]').html('<%= escape_javascript(render :partial => "users/follow_user", :locals => {:user => @user}) %>');
ビュー/ユーザー/unfollow.js.erb
$('.follow_user[data-user-id="<%=@user.id%>"]').html('<%= escape_javascript(render :partial => "users/follow_user", :locals => {:user => @user}) %>');
ビュー/レイアウト/_menu.html.erb
<% if user_signed_in? %>
<li><%= link_to(following_user_path(current_user.username)) do %>
<i class="icon-heart"></i>Following
<%= '(' + current_user.all_following.count.to_s + ')' if current_user.all_following.count > 0 %>
<% end %>
</li>
<li><%= link_to(followed_user_path(current_user.username)) do %>
<i class="icon-heart"></i>Followed by
<%= '(' + current_user.followers.count.to_s + ')' if current_user.followers.count > 0 %>
<% end %>
</li>
<% else %>
<li><%= link_to sanitize('<i class="icon-heart"></i> ') + "Following", following_user_path %></li>
<li><%= link_to sanitize('<i class="icon-heart"></i> ') + "Followed by", followed_user_path %></li>
<% end %>