Ruby On Rails 3问题:如何对查询结果进行排序

4
我正在尝试按照创建日期降序排列我的结果,但是order.clause似乎不起作用。我担心我已经看了很久,可以从第二个(或第三个或更多)一组眼睛中获益。 < p > < code > mailbox_controller.rb :
def show  
  current_user = User.find(session[:user_id])  
  @folder = Folder.where("user_id = #{current_user.id}").first  
  @msgs = @folder.messages.order("created_at DESC")  
  @messages = @msgs.where(["deleted IS NULL"] || ["deleted = ?", false]).paginate :per_page => 5, :page => params[:page]  
end

你尝试过将代码的最后两行合并为一行(先是first,然后是order)吗?我在想“order”和“where”方法可能会相互冲突。 - mharper
2个回答

3
@msgs = @folder.messages.order("created_at DESC")
@messages = @msgs.where(["deleted IS NULL"] || ["deleted = ?", false])

应该是

@messages = @folder.messages.order("created_at DESC").where("deleted = ? or deleted IS NULL", false)

感谢您的回复,fl00r。但是它仍然无法按created_at DESC排序。 - user714001
@messages.map(&:created_at) -> NoMethodError(你有一个空对象,而你没有预料到它!你可能希望得到一个数组的实例。错误发生在评估nil.map时):app/controllers/mailbox_controller.rb:13:in show' app/controllers/mailbox_controller.rb:5:in index' - user714001

0

我曾经遇到过类似的问题,看起来你想要的 created_at 属性属于文件夹而不是消息。

你可以尝试使用

@msgs = @folder.messages.order("messages.created_at DESC")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接