【发布时间】:2017-03-01 15:26:33
【问题描述】:
我的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。
调试这个有什么帮助吗?
【问题讨论】:
-
数组中有
nil的值,就在这里... updated_at: "2017-03-01 00:00:36", attachment_url: []>, nil, #<Message id: 11...,看到nil了吗? -
@fanta 你是对的,我在发布问题后注意到了同样的事情,所以我编辑了我的问题以添加更多细节。
-
为什么不试试
@conversations = current_user.master.conversations.joins(:messages).order("messages.created_at DESC")之类的东西?这样你的代码会更快。 -
这将返回多个对话对象。对话中的每条消息都有一个。您可以添加
.distinct来解决此问题。
标签: ruby-on-rails ruby-on-rails-4 controller nomethoderror