如何从所有用户的索引中删除current_user?

时间:2014-04-03 19:28:15

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-3.2

换句话说,在我的应用中,我有一个索引,显示我想从此列表中排除current_user的总用户数。

我已使用以下代码阻止user.name和user.profile_photo成功显示:

<% unless user.hidden_for?(current_user) || user.blocked_for?(current_user) || user == current_user %>

然而,它仍然显示当显示2个用户时,它只显示个人资料照片和其他用户的名字,它应该只是说显示一个用户而不包括我。

以下是最终需要修复的代码行:

 <h4 class="events_counter">
            <%= @users.any? ? "Showing #{pluralize(@users.size, 'people')}" : "No users to show" %>
          </h4>

任何帮助都会很棒!! 干杯!

更新:(此处是当前相关的索引操作)

class ProfilesController < ApplicationController
  before_filter :authenticate_user!

  def index
    if params[:search]
      terms = params[:search][:terms] || nil
      min_age = params[:search][:age_min] || nil
      max_age = params[:search][:age_max] || nil
      zipcode = params[:search][:zipcode] || nil
      distance = params[:search][:distance] || nil
      education_id = params[:search][:education_id] || nil
      # @ethnicity_id = params[:search][:ethnicity_id] || nil
      ethnicity_ids = params[:search][:cat_ids].split('').uniq || nil
      gender = params[:search][:gender] || nil
      @users = User.active.scoped_by_search(terms, min_age, max_age, education_id, ethnicity_ids, gender)
    else
      @users = User.active.page params[:page]
    end
  end

3 个答案:

答案 0 :(得分:2)

使用Rails 4.x

假设您的操作名称为index,您可以在其中设置@users实例变量,您可以执行以下操作:

def index
  #...
    @users = User.active.scoped_by_search(terms, min_age, max_age, education_id, ethnicity_ids, gender).where.not(id: current_user.id)
  else
    @users = User.active.where.not(id: current_user.id).page params[:page]
  #... 
end

此处,如果您有current_user,则@users将包含除current_user以外的所有用户。否则,@users将拥有所有用户。

此外,您不需要在视图中进行任何检查,即

 <% unless user.hidden_for?(current_user) || user.blocked_for?(current_user) || user == current_user %>

不再需要,因此您可以安全地将其删除。

此外,@users.size会提供其他用户的正确计数(current_user除外)。

答案 1 :(得分:1)

建议在查询中排除current_user而不是查看。例如在控制器中:

@users = User.where('id != ?', current_user.id)

但是,如果您需要将当前用户保留在@users数组中,请使用reject将当前用户排除为:

@users.reject { |u| u.id == current_user.id }

答案 2 :(得分:0)

我建议在其他地方建立一个新的visible_users数组。

这是一种基于当前逻辑和数组获取该数组的方法。

visible_users = @users.reject{|user| user.hidden_for?(current_user) || user.blocked_for?(current_user) || user == current_user}

希望这会有所帮助。