我有一个用户显示视图。 @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
如果有更好的办法来处理这样的事情,请指出我做错的事。
答案 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取决于发布日期。