2017-03-01 16 views
1

私は私のconversations_controllerで次のRailsのコードを持っている:NoMethodError(nilのための未定義のメソッド `の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を取得していた場合

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を抽出することはできませんし、ソート?あなたはおそらくnilに翻訳されたばかりの空#<ActiveRecord::Associations::CollectionProxy []>がある見ることができるように

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

:シンプル

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

を行う上で

は私に次のような応答を提供します。 これをデバッグするのに役立つ?

+0

配列に 'nil'という値があります。ここには' ... updated_at: "2017-03-01 00:00:36"、attachment_url:[]>、nil、#<メッセージID:11 ..それは 'nil'ですか? – fanta

+0

あなたは正しいと私は質問を投稿した直後に同じことに気づいたので、私は質問を編集して詳細を追加しました。 – anonn023432

+0

あなたは '@conversations = current_user.master.conversations.joins(:messages).order(" messages.created_at DESC ")'のようなものを試してみてください。そうすれば、あなたのコードはより速くなります。 – fanta

答えて

1

最後にメッセージを作成したコンバートのat属性を取得しようとしたときにエラーが発生しました。実際にはメッセージがありません。

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

メッセージを会話に参加させることで、少なくとも1つのメッセージとの会話だけが検索されるので、問題は解決されると思います。

関連する問題