NoMethodError(nil:NilClass 的未定义方法“created_at”)
NoMethodError (undefined method `created_at' for nil:NilClass)
我的 conversations_controller
中有以下 Rails 代码:
用户可能是:master
或 rookie
。
@conversations = current_user.master.conversations.all
@conversations = @conversations.sort_by { |c| c.messages.last.created_at }.reverse
但是在 运行 上,我得到 no method error
created_at
。
如果我这样 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
。
对调试有帮助吗?
当您尝试获取实际上没有任何消息的转换最后一条消息的 created at 属性时发生错误。
@conversations = current_user.master.conversations.joins(:messages)
@conversations = @conversations.sort_by { |c| c.messages.last.created_at }.reverse
通过将消息与对话结合起来,只会检索至少包含一条消息的对话,因此我认为问题已得到解决。
我的 conversations_controller
中有以下 Rails 代码:
用户可能是:master
或 rookie
。
@conversations = current_user.master.conversations.all
@conversations = @conversations.sort_by { |c| c.messages.last.created_at }.reverse
但是在 运行 上,我得到 no method error
created_at
。
如果我这样 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
。
对调试有帮助吗?
当您尝试获取实际上没有任何消息的转换最后一条消息的 created at 属性时发生错误。
@conversations = current_user.master.conversations.joins(:messages)
@conversations = @conversations.sort_by { |c| c.messages.last.created_at }.reverse
通过将消息与对话结合起来,只会检索至少包含一条消息的对话,因此我认为问题已得到解决。