我正在开发一个小型博客引擎。
有以下表格:博客和消息。
博客有一个外键:last_message_id,因此我通过调用 blog.last_message 来访问博客中的最后一条消息
我有以下代码可以使其工作:
class Blog < ActiveRecord::Base
belongs_to :last_message, :class_name => "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_at
and update_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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)