I'm creating a simple house listing page to get to grips with Rails and I currently have an add post page set up which posts to the index page however the newest post is displaying at the bottom of the page. How could I reverse the order of my posts to display newest posts at the top?
Not sure which code snippets I should provide but below is my code:
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
                Add the order to the query.
@houses = House.page(params[:page]).per(20).order(created_at: :desc)
Even better, you should avoid to chain multiple scopes directly in the controller. This approach is very hard to test. Create a custom method.
class House < ActiveRecord::Base
  # ...
  def self.listing(page)
    order(created_at: :desc).page(params[:page]).per(20)
  end
end
and call it in your controller
@houses = House.listing(params[:page])
In this way, you can test both listing and the controller separately with unit tests.
As a side note, even if you are a beginner, you should not skip the good habit of reading a basic book before writing code, and the official documentation. ;)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With