如何按降序订购帖子

时间:2016-08-30 22:05:31

标签: ruby-on-rails

我正在创建一个博客类型的网站,我希望帖子最新显示(降序)我尝试了一些不同的东西,并且我们无法弄明白。这是我目前的代码:

post.html.erb

<%= @posts.each do |post|%>
<div>
    <p><%= avatar_for(post.user, size: 40) %>
    <%= link_to post.username, post.user %></p>
    <h2>
        <%= link_to post.title, post %>
    </h2>

</div>
    <% end%>

发布控制器

class PostsController < ApplicationController 
    before_action :authenticate_user!
    def posts
        @posts = Post.all.order("created_at DESC")
    end


    def new 
        @post = Post.new 
    end 

    def create 
        @post = current_user.posts.new(post_params)
        if @post.save 
        redirect_to post_path(@post)
        else 
            render :new 
        end
    end 

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


    private 
    def post_params
        params.require(:post).permit(:title, :body, :all_tags)
    end 
end 

4 个答案:

答案 0 :(得分:2)

我相信,根据Guide,您正在寻找的语法是:

  Post.order(created_at: :desc)

看看它是否适合你。

答案 1 :(得分:1)

这应该是@posts,因为您在@posts调用post.html.erb来检索并显示所有帖子:

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

答案 2 :(得分:1)

该方法应该看起来像

def posts
    # Plural @posts
    @posts = Post.all.order(created_at: :desc)
end

只是一个小修复,在您的帖子方法中,您要声明@post变量,但在ERB文件中您正在调用@posts。 这应该是给你一个零错误。声明@posts(复数),然后使用更好的缩进声明您的ERB文件:

<%= @posts.each do |post| %>
  <div>
    <p>
      <%= avatar_for(post.user, size: 40) %>
      <%= link_to post.username, post.user %>
    </p>
    <h2>
      <%= link_to post.title, post %>
    </h2>
  </div>
<% end%>

答案 3 :(得分:0)

如果此问题尚未得到解答:

看起来问题来自PostsController中方法的名称。

您希望能够通过名为posts的方法访问@posts,但您尝试呈现的视图的文件名是post.html.erb。我相信它应该是posts.html.erb。

为什么不把它称为索引?这就是Rails惯例。

正如其他人所说,查询是正确的。希望这会有所帮助。