如何在Rails中订购?

我正在开发一个小型博客引擎。

有以下表格:博客和消息。

Blog有一个外键:last_message_id,所以我通过调用blog.last_message访问博客中的最​​后一条消息

我有以下代码使它工作:

class Blog  "Message" end 

我需要通过最后的消息来订购博客。 但是当我打电话时

 blogs.order("last_message.created_at DESC") 

它不起作用。 我收到以下错误:

 PGError: ERROR: missing FROM-clause entry for table "last_message" ORDER BY last_messa... 

我怎样才能使它工作?

UPDATE

这是解决方案:

 blogs.joins(:last_message).order("messages.created_at DESC"). 

我认为你的模型是错误的。 请参阅rails自动向模型添加2个属性: created_atupdate_at 。 因此,拥有像你描述的关系是一种愚蠢的态度。 对我来说,它应该是这样的:

 #model/blog.rb class Blog < ActiveRecord::Base has_many :messages end #model/message.rb class Message < ActiveRecord::Base belongs_to :blog end 

然后,要获取最后一条消息所订购的博客,您可以这样做:

 Blog.joins(:messages).order("messages.created_at_desc") 

您可能已经注意到,这将为您的博客模型提供双重条目。 如果这不是问题,请继续。 如果是,您有两个选择:执行each选项并测试您是否已经看过博客 - 如果没有,则显示它。 或者,您可以编写自己的sql。

您必须确保还选择了最后一条消息,以使该命令命令正常工作。\所以类似于:

 blogs.includes(:last_message).order("last_message.created_at desc") 
Interesting Posts