【Rails学习笔记】用户关注功能(三)


这节用于实现关注功能,分两种:


1.常规方式实现:

app/controllers/relationships_controller.rb

  1. class RelationshipsController < ApplicationController  
  2.   before_action :signed_in_user  
  3.   
  4.   def create  
  5.     @user = User.find(params[:relationship][:followed_id])  
  6.     current_user.follow!(@user)  
  7.     redirect_to @user  
  8.   end  
  9.   
  10.   def destroy  
  11.     @user = Relationship.find(params[:id]).followed  
  12.     current_user.unfollow!(@user)  
  13.     redirect_to @user  
  14.   end  
  15. end  

2.Ajax方式实现

使用 Ajax 后的关注用户表单
app/views/users/_follow.html.erb

  1. <%= form_for(current_user.relationships.build(followed_id: @user.id),  
  2.              remote: true) do |f| %>  
  3.   <div><%= f.hidden_field :followed_id %></div>  
  4.   <%= f.submit "Follow", class: "btn btn-large btn-primary" %>  
  5. <% end %>  

使用 Ajax 后的取消关注用户表单
app/views/users/_unfollow.html.erb

  1. <%= form_for(current_user.relationships.find_by(followed_id: @user),  
  2.              html: { method: :delete },  
  3.              remote: true) do |f| %>  
  4.   <%= f.submit "Unfollow", class: "btn btn-large" %>  
  5. <% end %>  

在 Relationships 控制器中响应 Ajax 请求
app/controllers/relationships_controller.rb

  1. class RelationshipsController < ApplicationController  
  2.   before_action :signed_in_user  
  3.   
  4.   def create  
  5.     @user = User.find(params[:relationship][:followed_id])  
  6.     current_user.follow!(@user)  
  7.     respond_to do |format|  
  8.       format.html { redirect_to @user }  
  9.       format.js  
  10.     end  
  11.   end  
  12.   
  13.   def destroy  
  14.     @user = Relationship.find(params[:id]).followed  
  15.     current_user.unfollow!(@user)  
  16.     respond_to do |format|  
  17.       format.html { redirect_to @user }  
  18.       format.js  
  19.     end  
  20.   end  
  21. end  

创建关注“关系”的 JS-ERb 代码
app/views/relationships/create.js.erb

[javascript] view plain copy print ?
  1. $("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")  
  2. $("#followers").html('<%= @user.followers.count %>')  

销毁关注“关系”的 JS-ERb 代码
app/views/relationships/destroy.js.erb

[javascript] view plain copy print ?
  1. $("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")  
  2. $("#followers").html('<%= @user.followers.count %>')  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值