Ruby on Rails - 我如何更改页面顶部显示的最新帖子顺序?

时间:2015-02-04 11:58:37

标签: ruby-on-rails ruby rails-activerecord

我正在创建一个简单的房屋列表页面来掌握Rails,我目前有一个添加帖子页面设置,它会发布到索引页面,但最新的帖子显示在页面底部。我怎样才能改变帖子的顺序以在顶部显示最新帖子?

不确定我应该提供哪些代码段,但下面是我的代码:

houses_controller.rb -

class HousesController < ApplicationController
  def index
    @houses = House.page(params[:page]).per(20)
  end

  def new
    @house = House.new
  end

  def create
    @house = House.new(params.require(:house).permit(:title, :price, :description, :image))
  if @house.save
    redirect_to root_path
  else
    render "new"
  end
  end

end

index.html.erb -

<% @houses.each do |house| %>

  <div class="house">
    <p><%= house.image %></p>
    <h2><%= house.title %></h2>
    <h2><%= house.price %></h2>
    <p><%= house.description %></p>
  </div>
<% end %>

<p><%= paginate @houses %></p>

house.rb -

class House < ActiveRecord::Base
    validates :title, presence: true
    validates :price, presence: true
    validates :description, presence: true
    validates :image, presence: true
end

1 个答案:

答案 0 :(得分:8)

order添加到查询中。

@houses = House.page(params[:page]).per(20).order(created_at: :desc)

更好的是,您应该避免直接在控制器中链接多个范围。这种方法很难测试。创建自定义方法。

class House < ActiveRecord::Base
  # ...

  def self.listing(page)
    order(created_at: :desc).page(params[:page]).per(20)
  end
end

并在您的控制器中调用

@houses = House.listing(params[:page])

通过这种方式,您可以使用单元测试单独测试listing和控制器。

作为旁注,即使您是初学者,在编写代码和官方文档之前,也不应该忽略阅读基本书籍的好习惯。 ;)