ユーザーの配列の値を持つ変数を返そうとしています。満たさなければならないいくつかの条件があります。ユーザーは にpublic_find
設定されてtrue
いる必要があり、current_user
(現在ログインしているユーザーのセッション変数) であってはならず、まだフレンドシップの一部であってはなりません。1 番目と 2 番目の条件は完全に機能します。ただし、関連付けが既に存在するユーザーcurrent_users.friendships
の値の配列である必要がある 3 番目の部分に問題があります。ID
何かご意見は?
@users = User.find(:all, :conditions => ['
public_find=true AND
id <> ? AND
id NOT IN (?)',
current_user.id, current_user.friendships])
編集:
リストから抜けていたことがわかりました。これでうまくいきます。ただし、誰かがまだ友達を持っていない場合は、current_user.friendships.pluck(:friend_id)
が返されNULL
ます。NOT IN
と を使用すると、それが悪い習慣であり、予期しない結果が返されることを私は知っていNULL
ます。しかし、返された配列が空の場合に値を [0] や [1] などの現実的な値に設定できる条件を作成するにはどうすればよいでしょうか?
@users = User.find(:all, :conditions => ['
public_find=true AND
id <> ? AND
id NOT IN (?)',
current_user.id, current_user.friendships.pluck(:friend_id) || [0]])
もう一度編集:
私はそれを働かせました。ただし、このようなステートメントを作成するのがベスト プラクティスであるかどうかを知りたいと思います。基本的に、current_user.friendships.pluck(:friend_id)
が空かどうかを確認するためのチェックを行っています。その場合は [0] を返します。それ以外の場合は、ユーザー ID の配列を返します (外部キーとしてfriend_id
)。
@users = User.find(:all, :conditions => ['
public_find=true AND
id <> ? AND
id NOT IN (?)',
current_user.id,
(current_user.friendships.pluck(:friend_id).empty? ? [0] : current_user.friendships.pluck(:friend_id))])