ruby-on-rails – 使用follow / unfollow按钮对用户进行分页:由
我的users / show.html.erb页面正常工作,因为每个页面上只显示一个类名.当用户在users / index.html.erb中以及follow / unfollow按钮进行分页时,关系/ js.create.erb和relationship / js.destroy.erb会变得很古怪,因为页面上有重复的类名,(第一个分页)用户更新,无论跟随/取消关注哪个用户,这仅在刷新页面时自行修复(实际模型仍能正常工作)).
我没有在users / index.html.erb中使用unfollow / follow partials,因为index.html.erb中没有@user变量,它对@users进行了分页,所以我使用了user.id. class RelationshipsController < ApplicationController before_action :logged_in_user def create @user = User.find(params[:followed_id]) current_user.follow(@user) respond_to do |format| format.html { redirect_to @user } format.js end end def destroy @user = Relationship.find(params[:id]).followed current_user.unfollow(@user) respond_to do |format| format.html { redirect_to @user } format.js end end end **relationships/create.js.erb** $("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>"); $("#followers").html('<%= @user.followers.count %> <br> followers'); **relationships/destroy.js.erb** $("#follow_form").html("<%= escape_javascript(render('users/follow')) %>"); $("#followers").html('<%= @user.followers.count %> <br> followers'); **users/index.html.erb** <div class="row community"> <% @users.in_groups_of(3,false).each do |users| %> <div class="col-sm-12"> <% users.each do |user| %> <ul class="name-head"> <% unless current_user == user %> <div id="follow_form"> <% if current_user.following?(user) %> <%= form_for(current_user.active_relationships.find_by(followed_id: user.id),html: { method: :delete },remote: true) do |f| %> <%= f.submit "Unfollow",class: "btn btn-primary" %> <% end %> <% else %> <%= form_for(current_user.active_relationships.build,remote: true) do |f| %> <div><%= hidden_field_tag :followed_id,user.id %></div> <%= f.submit "Follow",class: "btn btn-primary" %> <% end %> <% end %> </div> <% end %> </ul> <div class="col-xs-12"> <div class="col-xs-4"> <a href="<%= following_user_path(user.id) %>"> <center><strong id="following" class:"stat"> <%= user.following.count %><br> following </strong></center> </a> </div> <div class="col-xs-4"> <a href="<%= followers_user_path(user.id) %>"> <center><strong id="followers" class="stat"> <%= user.followers.count %><br> followers </strong></center> </a> </div> <div class="col-xs-4"> <center><strong id="photo-count" class="stat"> <%= user.photos.count %><br> photos shared </strong></center> </div> </div> </div> <% end %> </div> <% end %> </div> <%= will_paginate %> **users/show.html.erb** . . . <li class="follow"> <%= render 'follow_form' if logged_in? %> </li> </ul> </div> <div class="col-xs-12"> <div class="col-xs-4"> <a href="<%= following_user_path(@user) %>"> <center><strong id="following" class:"stat"> <%= @user.following.count %><br> following </strong></center> </a> </div> <div class="col-xs-4"> <a href="<%= followers_user_path(@user) %>"> <center><strong id="followers" class="stat"> <%= @user.followers.count %><br> followers </strong></center> </a> </div> <div class="col-xs-4"> <center><strong id="photo-count" class="stat"> <%= @user.photos.count %><br> photos shared </strong></center> </div> end **_follow_form.html.erb** <% unless current_user?(@user) %> <div id="follow_form"> <% if current_user.following?(@user) %> <%= render 'unfollow' %> <% else %> <%= render 'follow' %> <% end %> </div> <% end %> **_follow.html.erb** <%= form_for(current_user.active_relationships.build,remote: true) do |f| %> <div><%= hidden_field_tag :followed_id,@user.id %></div> <%= f.submit "Follow",class: "btn btn-primary" %> <% end %> **_unfollow.html.erb** <%= form_for(current_user.active_relationships.find_by(followed_id: @user.id),remote: true) do |f| %> <%= f.submit "Unfollow",class: "btn btn-primary" %> <% end %> 编辑:我考虑过将user_id传递给类,例如: <div id="follow_form<%="#{user.id}"%>"> which created <div id="follow3"> 但是我不知道如何将它传递给destroy.js.erb和create.js.erb I have tried many combinations such as: $("#follow_form<%="#{user.id}"%>").html("<%= escape_javascript(render('users/unfollow')) %>"); 和 $("#follow_form<%= @user.id%>").html("<%= escape_javascript(render('users/unfollow')) %>"); 但是,代码仍然不起作用,即使它确实如此,它仍然需要工作,因为更改create / destroy.js.erb文件会破坏users / show.html.erb跟随/取消关注按钮. 编辑:我也发现这个question是相似的,但它不包含已接受的答案. 编辑Heroku日志:这是我在users / index.html.erb页面上关注/取消关注用户时获得的内容: Started DELETE "/relationships/360" for 184.90.97.154 at 2016-05-13 20:05:17 +0000 Processing by RelationshipsController#destroy as JS Rendered users/_follow.html.erb (1.6ms) (1.1ms)[0m [1mSELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = $1[0m [["followed_id",1]] Started POST "/relationships" for 184.90.97.154 at 2016-05-13 20:07:26 +0000 Processing by RelationshipsController#create as JS [1m[36m (1.5ms)[0m [1mCOMMIT[0m 解决方法
我复制了你的代码,在添加下面的修改后,它完美地运行了. (即我不需要为“关注/取消关注”按钮更改页面重新加载)
请尝试以下操作以查看其是否有效: users / index.html.erb(这里只有相关代码,即“Follow /”取消关注“按钮) <ul class="name-head"> <% unless current_user == user %> <%= render partial: 'follow_form',locals: { user: user } %> <% end %> </ul> 用户/ _follow_form.html.erb <div id="follow_form-<%= user.id %>"> <% if current_user.following?(user) %> <%= render partial: 'unfollow',locals: { user: user } %> <% else %> <%= render partial: 'follow',locals: { user: user } %> <% end %> </div> 用户/ _unfollow.html.erb <%= form_for(current_user.active_relationships.find_by(followed_id: user.id),remote: true) do |f| %> <%= f.submit "Unfollow",class: "btn-default" %> <% end %> 用户/ _follow.html.erb <%= form_for(current_user.active_relationships.build,remote: true) do |f| %> <div><%= hidden_field_tag :followed_id,user.id %></div> <%= f.submit "Follow",class: "btn" %> <% end %> 关系/ create.js.erb $("#follow_form-<%= @user.id %>").html("<%= escape_javascript(render(partial: 'users/unfollow',locals: { user: @user })) %>"); 关系/ destroy.js.erb $("#follow_form-<%= @user.id %>").html("<%= escape_javascript(render(partial: 'users/follow',locals: { user: @user })) %>"); 请注意使用<%= render partial:“_ partial.html.erb”,locals:{var_name:var}%>.可选的散列本地:{…….}允许您将局部变量传递给想要渲染的局部变量(_partial.html.erb)在这种情况下,您还需要在名称前添加partial:您要渲染的部分. 这样,您的用户本地变量不仅可以在users / index.html.erb中使用,还可以在上面列出的其他文件中使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |