2012-04-12 40 views
2

我是Rails这个世界的新手。我无法解决这个问题。如何获得micropost创建日期的@microposts。如何将`.order`调用添加到我检索的ActiveRecord集合中?

这是该行

@microposts = current_user.followeds.map(&:microposts).flatten 

我只是设法日期“followeds”命令,但是这不是我所期待的。我所做的所有尝试都给了我错误,所以我想我不知道一些语法。

欢迎任何帮助!

回答

2

通常情况下,你会添加一个order条款,如:

Micropost.where(:written_by => current_user.followeds).order(:created_at) 

您目前有这样的线结构就不会允许,但是这样的,因为order只在ActiveRecord的::关系可用,一旦你做了map你不再有一个可用的连锁关系。

如果是这样的话,你会想是这样的:

current_user.followeds.map(&:microposts).flatten.sort_by { |m| m.created_at } 
+0

太棒了!很好解释! (:microposts)中缺少“&”。应该是(&:microposts),我想。 ;-) – 2012-04-12 13:08:13

+0

哎呀,是的;你是对的。我会编辑它。 – 2012-04-12 15:22:47

0

我想你应该尝试从另一个角度接近这个。

怎么是这样的:

@microposts = Micropost.where(author_id: current_user.followed_ids).order(:created_at).all 

你可能当然要为你必须确定哪些用户Micropost是书面的任何外国密钥交换author_id

如果你想颠倒帖子(最新的第一个),你只需要写order("created_at desc")

+0

完美,谢谢。 – 2012-04-12 13:09:16

相关问题