在Rails中添加created_at DESC功能

时间:2013-12-18 05:36:36

标签: ruby-on-rails ruby

我有一个包含帖子和评论模型的应用。在我的索引操作/视图中,我正在迭代帖子,并将它们从最近创建的时间显示到创建时最早的时间。我的评论嵌套在我的帖子中,所以在我的帖子节目动作/视图中,我想迭代评论并让它们显示从最近创建的到最早创建的。如果我在post.rb文件中创建方法,我似乎只能使其工作。我有这个:

post.rb:

  def newest_comments
    self.comments.order("created_at DESC")
  end  

在我的帖子展示视图中,我可以遍历帖子评论并且效果很好:

<% @post.newest_comments.each do |comment|
<% end %>

但我想在控制器层设置此功能,但我无法弄清楚如何。这就是我在帖子控制器中的show动作中所拥有的:

  def index
    @posts = Post.all.order("created_at DESC")
  end

  def show
    @comment = Comment.new
    @comments = Comment.all.order("created_at DESC")
  end

现在我更新的帖子显示视图:

<% @post.comments.each do |comment| %>
<% end %>

由于我之前的行动,@post var就在那里。所以我的问题是,为什么我只能在我的展示视图中调用它来在我的帖子显示视图中访问这个ivar?

5 个答案:

答案 0 :(得分:15)

使用updates to Rails,您可以避免使用INSERT INTO courses(courseid, contentid, name, code, description, url, metakeywords, metadescription) VALUES(@courseid, @contentid, @name, @code, @description, @url, @metakeywords, @metadescription)" SQL语法,如下所示:

created_at DESC

答案 1 :(得分:8)

您可以使用范围

class Comment < ActiveRecord::Base
  scope :newest_first, order(created_at: :desc)
end

然后你就像

一样使用它
@comments = Comment.newest_first

@comments将被订购

答案 2 :(得分:2)

现在您的show action代码就像返回所有评论,而不是与post相关的评论。要在show view中访问@post,您必须像这样更新您的show动作。

 def show
    @post = Post.find(params[:id])
    @comment = @post.comment.new
    @comments = @post.comments.order("created_at DESC")
 end

因此,您可以在Show视图中访问@ post和@comments。

现在更新这样的帖子显示视图以显示评论:

<% @comments.each do |comment| %>
<% end %

另外,如果需要,您也可以在视图中使用@post对象。 @comments新评论。

您可以在Rails-guides http://guides.rubyonrails.org/getting_started.html#showing-posts上看到此评论后应用 其他有用的链接:http://www.reinteractive.net/posts/32-ruby-on-rails-3-2-blog-in-15-minutes-step-by-step

答案 3 :(得分:1)

您可以在帖子模型中定义排序:

class Post
  has_many :comments, :order => 'created_at DESC'
  # ...
end

答案 4 :(得分:0)

在评论模型中使用此设置默认顺序:

default_scope { order("created_at DESC") }