사용자 배열 값을 사용하여 변수를 반환하려고합니다. 충족되어야하는 몇 가지 조건이 있습니다. 사용자는 public_find
을 true
으로 설정해야하며 current_user
(현재 로그인 한 사용자의 세션 변수)이 아니어야하며 우정의 일부가 아니어야합니다. 첫 번째와 두 번째 조건은 완벽하게 작동합니다. 그러나 세 번째 부분에 문제가 있습니다. 여기서 current_users.friendships
은 연관이 이미있는 사용자의 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]을 반환합니다. 그 이외의 경우는, 유저 식별자의 배열을 돌려줍니다 (foreign keyed는 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))])