2017-03-01 68 views
1

我在我的conversations_controller以下Rails代碼:NoMethodError(未定義的方法`created_at」的零:NilClass)

用戶可以是:masterrookie

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

但在運行此我得到了一個created_atno method error。 如果我做了puts這樣的:

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

這給了我以下響應:

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: []>] 

如果我得到created_at那麼爲什麼我不能提取最後的消息created_At比較和分類?

在做一個簡單的

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

給了我以下響應:

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: []>]>] 

正如你可以看到有一個空#<ActiveRecord::Associations::CollectionProxy []>這可能是越來越轉換爲nil。 任何幫助調試呢?

+0

數組中有'nil'值,在這裏'... updated_at:「2017-03-01 00:00:36」,attachment_url:[]>,nil,#<消息ID:11 .. .',看到'nil'? – fanta

+0

@fanta你是對的,我在發佈問題後發現了同樣的事情,所以我編輯了我的問題以添加更多細節。 – anonn023432

+0

你爲什麼不嘗試類似'@conversations = current_user.master.conversations.joins(:messages).order(「messages.created_at DESC」)'',這樣你的代碼會更快。 – fanta

回答

1

當您嘗試獲取會話最後一條消息的實際沒有任何消息的創建屬性時發生錯誤。

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

通過加入與對話只有ATLEAST一個消​​息會話中的信息將被檢索,因此由我認爲這個問題得到解決。

相關問題