Ruby 于 Rails - 如何将页面顶部的帖子显示顺序更改为最新?
Ruby on Rails - how would I change the order of posts displayed to newest at the top of page?
我正在创建一个简单的房源列表页面以掌握 Rails 并且我目前有一个添加 post 页面设置,但是 posts 到索引页面最新的 post 显示在页面底部。我怎样才能颠倒 post 的顺序以在顶部显示最新的 post?
不确定我应该提供哪些代码片段,但下面是我的代码:
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
将 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
和控制器。
附带说明一下,即使你是初学者,也不应该跳过写代码前阅读基础书籍和官方文档的好习惯。 ;)
我正在创建一个简单的房源列表页面以掌握 Rails 并且我目前有一个添加 post 页面设置,但是 posts 到索引页面最新的 post 显示在页面底部。我怎样才能颠倒 post 的顺序以在顶部显示最新的 post?
不确定我应该提供哪些代码片段,但下面是我的代码:
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
将 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
和控制器。
附带说明一下,即使你是初学者,也不应该跳过写代码前阅读基础书籍和官方文档的好习惯。 ;)