2017-03-01 18 views
1

나는이 내 conversations_controller에서 다음 레일 코드 :NoMethodError (전무에 대한 정의되지 않은 메서드`created_at 'NilClass)

사용자가 될 수있다 : master 또는 rookie.

@conversations = current_user.master.conversations.all 
@conversations = @conversations.sort_by { |c| c.messages.last.created_at }.reverse 

그러나

이 실행에 나는 created_at에 대한 no method error을 얻고있다. 나는이 같은 puts 할 경우

puts "Sorted: #{@conversations.map { |c| c.messages.last}}" 

이 나에게 다음과 같은 응답이 제공 : 다음 created_at을지고있어 경우에 나는 비교할 마지막 메시지 created_At를 추출 할 수없는 이유

Sorted: [#<Message id: 9, content: "some content", user_id: 3, conversation_id: 1, created_at: "2017-03-01 00:00:36", updated_at: "2017-03-01 00:00:36", attachment_url: []>, nil, #<Message id: 11, content: "new message", user_id: 3, conversation_id: 6, created_at: "2017-03-01 15:15:58", updated_at: "2017-03-01 15:15:58", attachment_url: []>] 

및 종류?

The conversations sorted are: [#<ActiveRecord::Associations::CollectionProxy [#<Message id: 1, content: "Hey there! This is my first message.", user_id: 1, conversation_id: 1, created_at: "2017-02-28 23:57:46", updated_at: "2017-02-28 23:57:46", attachment_url: []>, #<Message id: 2, content: "Thank you for your message. I am a coach.", user_id: 3, conversation_id: 1, created_at: "2017-02-28 23:57:46", updated_at: "2017-02-28 23:57:46", attachment_url: []>, #<Message id: 9, content: "adsdadasd", user_id: 3, conversation_id: 1, created_at: "2017-03-01 00:00:36", updated_at: "2017-03-01 00:00:36", attachment_url: ["https://ace-up-www.s3.amazonaws.com/message-attachments%2Fbd450b1e-f85c-47ec-94c7-c539809f8d68%2Frecommendation-bg.jpg"]>]>, #<ActiveRecord::Associations::CollectionProxy []>, #<ActiveRecord::Associations::CollectionProxy [#<Message id: 10, content: "Add a new message", user_id: 8, conversation_id: 6, created_at: "2017-03-01 14:58:29", updated_at: "2017-03-01 14:58:29", attachment_url: []>, #<Message id: 11, content: "new message", user_id: 3, conversation_id: 6, created_at: "2017-03-01 15:15:58", updated_at: "2017-03-01 15:15:58", attachment_url: []>]>] 

당신은 아마 nil로 번역지고 빈 #<ActiveRecord::Associations::CollectionProxy []>이 볼 수 있듯이 :

puts "The conversations sorted are: #{@conversations.map { |c| c.messages}}" 

간단한

일을

나에게 다음과 같은 응답을 제공합니다. 디버깅에 도움이 필요합니까?

+0

배열에는'... updated_at : "2017-03-01 00:00:36", attachment_url : []>, nil, # <메시지 id : 11 ..라는 nil 값이 있습니다. .', 그'nil'을 참조하십시오? – fanta

+0

@fanta 당신 말이 맞아요. 질문을 게시 한 직후에 똑같은 것을 발견했습니다. 그래서 더 자세히 설명해 달라는 제 질문을 편집했습니다. – anonn023432

+0

'@conversations = current_user.master.conversations.joins (: messages) .order ("messages.created_at DESC")'와 같은 것을 시도해보십시오. 그러면 코드가 더 빨라질 것입니다. – fanta

답변

1

conversations 마지막 메시지의 특성을 생성하려고 시도 할 때 오류가 발생했습니다. 실제로는 메시지가없는 메시지입니다.

@conversations = current_user.master.conversations.joins(:messages) 
@conversations = @conversations.sort_by { |c| c.messages.last.created_at }.reverse 

메시지를 대화와 결합하면 적어도 하나의 메시지 만 검색되므로 문제가 해결된다고 생각됩니다.