에서 테이블 속성의 값이 주어진 조건을 찾을 수 :레일 액티브 내가 2 개 테이블이이 개 테이블
- 각 ('recipient_id'에 관련된 자신의 ID를 (두 개의 사용자 ID가 대화 목록을 포함하는 대화 테이블 및 'sender_id')
- 기존 대화 중 하나와 관련된 메시지가 포함 된 메시지 테이블 모든 Message 인스턴스에는 대화에 읽지 않은 메시지가 있는지 표시하기위한 부울 속성 '읽기'(기본값은 false)가 포함됩니다. .
대화 has_many : 메시지와 메시지 belongs_to : conversation
내 목표는 current_user에 (기존 대화 중) 읽지 않은 메시지가 있으면 일반 경고를 표시하는지 확인하는 것입니다. 지금까지 각 대화마다 경고를 표시했지만 일반적인 방법을 구현하는 효율적인 방법을 찾기 위해 애 쓰고 있습니다.
- 는 현재 사용자의 대화의 각각의 마지막 메시지 찾기 :
내 원래의 접근 방식에 있었다.
- 현재 사용자가 마지막 메시지를 각각 보내고 read == false 인 경우 평가하십시오.
- 마지막 메시지 중 하나라도 이러한 조건을 충족하면 true를 반환합니다.
이 다음 코드로 번역 :
@conversations = current_user.conversations
@unread = []
if @conversations.exists?
@conversations.each do |conversation|
if conversation.messages.exists?
if conversation.messages.last.user_id != current_user.id && conversation.messages.last.read == false
@unread << true
end
end
end
end
@unread.include?(true)
end
나는 아주 새로운 코딩 해요하지만 모든 CURRENT_USERS 대화를 통해 루프를 갖는 '어떤이 있는지 확인하기 위해 배열을 만드는 매우 비효율적 인 방법을 보인다 true '값을가집니다.
메시지 자체를 반복하지만 인스턴스에는 보낸 사람의 user_id 만 있으므로 대화 모델과 연결하지 않으면 메시지가 그에게 전송되었는지 여부를 알 수 없습니다.
더 적절한 액티브 레코드 쿼리 또는 더 나은 접근 방법으로이를 달성하는 효율적인 방법을 도울 수 있습니까?
그건 그렇고 확실하지는 않지만 내 dev 환경에서 postgresql을 사용하고 있습니다.
감사
감사합니다. 사쟌. 말된다. 내가 뉴스를 얻 자마자 그것에 대해 생각해보고 그것에 대해 생각하게하고 다시 돌아가겠습니다. – Andrew