如何按日期降序获取视图中的@ user.posts

时间:2014-09-16 13:29:46

标签: ruby-on-rails ruby-on-rails-4

我有一个用户显示视图。 @user有一个:wall有很多:帖子。如何按日期返回@ user.wall.posts?

这些wall.posts可以来自@user或其他用户。

仅供参考我通过制作Facebook克隆来学习。

视图

<% @user.wall.posts.each do |post| %>
    <div class="status">
        <h3><%= link_to post.author.name %></h3>
        <h4><%= post.created_at.strftime("%B %d, %Y") %></h4>
        <p><%= post.content %></p>
    </div>
<% end %>

控制器

def show
    @user = User.find(params[:id])
    @post = Post.new
end 

如果有更好的办法来处理这样的事情,请指出我做错的事。

2 个答案:

答案 0 :(得分:3)

您可以获得ordered这样的帖子:

@user.wall.posts.order(created_at: :desc)

虽然视图中有点脏,但您可以在Post中声明scope

class Post < ActiveRecord::Base
  scope :by_date, -> { order(created_at: :desc) }
end

然后在您的视图中使用它:

@user.wall.posts.by_date

如果您始终希望Wall返回按日期排序的帖子,您可以declare the association这样:

class Wall < ActiveRecord::Base
  has_many :posts, -> { by_date }
end

请注意,上面的示例也使用Post中的范围。

答案 1 :(得分:1)

这应该适用于您的帖子模型

default_scope { order("created_at DESC")}

您可以找到更多信息ActiveRecord::Scoping::Default::ClassMethods

这将使所有帖子显示desc取决于发布日期。