1

アプリでユーザー検索の結果をフィルタリングして、友達ではないユーザーのみを表示しようとしています。my friends テーブルには 3 つの列があります。f1(リクエスト送信者のユーザーID)、f2(リクエストを受信したフレンドのユーザーID)、confirmed(trueまたはfalseのブール値)。ご覧のとおり、@usersfiltered が検索結果です。次に、現在のユーザーの友人の定義が確立されます。次に、検索結果から友達を削除しようとしています。これは機能していないようですが、かなり簡単なはずです。私は削除(良くない)と破壊を試みました。

def index

#THIS IS THE SEARCH RESULT

@usersfiltered = User.where("first_name LIKE?", "%#{params[:first_name]}%" )

#THIS IS DEFINING ROWS ON THE FRIEND TABLE THAT BELONG TO CURRENT USER

@confirmedfriends = Friend.where(:confirmed => true)
friendsapproved = @confirmedfriends.where(:f2 => current_user.id)
friendsrequestedapproved = @confirmedfriends.where(:f1 => current_user.id)

#GOING THROUGH SEARCH RESULTS
@usersfiltered.each do |usersfiltered|

  if friendsapproved.present?
    friendsapproved.each do |fa|
      if usersfiltered.id == fa.f1
 #NEED TO REMOVE THIS FROM RESULTS HERE SOMEHOW
          usersfiltered.remove
      end
    end
  end
#SAME LOGIC
  if friendsrequestedapproved.present?
    friendsrequestedapproved.each do |fra|
      if usersfiltered.id == fra.f2
          usersfiltered.remove
      end
    end
  end

  end

終わり

4

2 に答える 2

1

あなたがしていることを実装するためのより良い方法があるかもしれないことに同意しますが、あなたが直面している特定の問題は、Rails 4 ではwhereメソッドがActiveRecord::Relationnot an を返すことだと思いますArray。で使用できますeachRelation、一般に配列操作を実行することはできません。

ただし、次のようにメソッドを使用して aRelationを anに変換できます。Arrayto_a

@usersfiltered = User.where("first_name LIKE?", "%#{params[:first_name]}%" ).to_a

これにより、ループ内で次のことが可能になります。

usersfiltered.delete(fa)
于 2013-08-16T23:20:40.653 に答える