You can see on the index action that you are not doing any ordering:
def index
@users=User.paginate(page: params[:page])
end
you can easily order by name doing
def index
@users = User.order(:name).paginate(page: params[:page])
end
Pergunta
I just finished railstutorial by michael hartl lesson 9. On localhost everything looks fine, but when i deploy application on heroku some users are on wrong places in user's list (for example, Example User have to be at first page, but it's at second page). Why does it happen?
My appliction: https://mordor-depth.herokuapp.com/users
You can sing-in with Example User: example@railstutorial.org foobar
Sorry, for a stupid question:)
users_controller.rb
class UsersController < ApplicationController
before_action :signed_in_user, only: [:index,:edit,:update,:destroy]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: :destroy
def index
@users=User.paginate(page: params[:page])
end
def show
@user=User.find(params[:id])
end
def new
@user=User.new
end
def create
@user = User.new(user_params)
if @user.save
sign_in @user
flash[:success]="Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success]='User deleted!'
redirect_to users_url
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
def edit
end
def update
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name,:email,:password,:password_confirmation)
end
#Before filters
def signed_in_user
store_location
redirect_to signin_url, notice:'Please sign in.' unless signed_in?
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>
_user.html.erb
<li>
<%= gravatar_for user, size:52 %>
<%=link_to user.name, user %>
<% if current_user.admin? && !current_user?(user)%>
| <%= link_to "delete", user, method: :delete, data: { confirm: "You sure?" } %>
<% end %>
</li>
Solução
You can see on the index action that you are not doing any ordering:
def index
@users=User.paginate(page: params[:page])
end
you can easily order by name doing
def index
@users = User.order(:name).paginate(page: params[:page])
end