【问题标题】:How to check if the current_user blocks the target user with Acts-as-Follower如何检查 current_user 是否使用 Acts-as-Follower 阻止目标用户
【发布时间】:2018-06-21 18:32:55
【问题描述】:

我无法检查 current_user 是否阻止了目标用户。我正在尝试为阻止/取消阻止功能创建一个切换按钮。我不知道人们是如何做到的,除非他们的解决方案没有为 AJAX 做好准备。如何检查 current_user 是否跟随目标 @user 对象?

_block_user.html.erb

<% # unless @user == current_user %>
  <% **if current_user.blocking?(@user)** %>
    <%= link_to(unblock_user_path(@user), :remote => true, :class => 'btn btn-outline-danger') do %>
      <i class="fa fa-stop-circle"></i>
      Unblock
    <% end %>
  <% else %>
    <%= link_to(block_user_path(@user) ,:remote => true, :class => 'btn btn-outline-primary') do %>
      <i class="fa fa-play-circle"></i>
      Block
    <%end%>
  <% end %>
<% # end %>

【问题讨论】:

    标签: ruby-on-rails ajax activerecord acts-as-follower


    【解决方案1】:

    如果它是一个带有 AJAX 的按钮,你必须有类似的东西

    <% if (!current_user.liked? @user) %>
    
            <%= link_to like_user_path(@user), class:"like-btn", method: :put, remote: true do %> 
            <i class="fa fa-stop-circle"></i>
            <% end %>  
    
        <% else %>
    
            <%= link_to like_user_path(@user), class:"like-btn", method: :put, remote: true do %> 
            <i class="fa fa-play-circle"></i>
            <% end %> 
    
     <% end %>
    

    like.js.erb

    <% if current_user.liked? @user %>
         document.getElementsByClassName('like-btn')[0].className = "like-btn liked";
    <% else %>
         document.getElementsByClassName('like-btn')[0].className = "like-btn disliked";
    <% end %>
    

    控制器/用户

    def like
        if !current_user.liked? @user
          @user.liked_by current_user
        elsif current_user.liked? user
          @user.unliked_by current_user 
        end
        respond_to do |format|
            format.html { redirect_back(fallback_location: root_path) }
            format.js 
            end
      end 
    

    【讨论】:

    • 看起来不错。我使用了不同的方法来让按钮显示正确的状态。我会发布解决方案。
    【解决方案2】:

    我找出用户是否被阻止的方法。 (在没有 current_user 检查器的情况下测试)

    <% #unless @user == current_user %>
    <div id="block_user<%= @user.id %>">
      <% if current_user.blocks.include?(@user) %>
        <%= link_to(unblock_user_path(@user), :remote => true, :class => 'btn btn-outline-danger') do %>
          <i class="fa fa-stop-circle"></i>
          Unblock
        <% end %>
      <% else %>
        <%= link_to(block_user_path(@user), :remote => true, :class => 'btn btn-outline-primary') do %>
          <i class="fa fa-play-circle"></i>
          Block
        <% end %>
      <% end %>
    </div>
    <% # end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多