2013-10-12 55 views
0

我下面RubyonRails Tutorialsby哈特爾的(第9章)..的Heroku顯示第一個用戶在最後一頁中RailsTutorials第9章

我的本地計算機上的所有用戶的列表中顯示爲根據自己的用戶ID。

由於「AKS」(用戶名有id = 1,同時也是此頁面的管理員)顯示在列表頂部,但在Herokuapp上傳後顯示的內容相同,列表顯示方式不同

第一個用戶出現在最後一頁,但第二個用戶及其以後仍在第一頁上顯示。 任何人都可以請我建議我該怎麼做才能在Herokuapp.com上正確顯示列表 我附上了在localhost和heroku上顯示的列表圖像。

第一圖像是示出了在本地計算機和第二個列表被列表顯示在heroku上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.all 
    @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 sample app" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     flash[:success] = "Profile updated" 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    User.find(params[:id]).destroy 
    flash[:success] = "User destroyed." 
    redirect_to users_url 
    end 



    private 

    def user_params 
     params.require(:user).permit(:name, :email, :password, 
            :password_confirmation) 
    end 


    # below code for signed_in_user can also be written as 
    #def signed_in_user 
    # redirect_to signin_url, notice: "Please sign in." unless signed_in? 
    #end 

    # Before filters 

    def signed_in_user 
     unless signed_in? 
     store_location 
     redirect_to signin_url, notice: "Please sign in." 
     end 
    end 

    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_url) unless current_user?(@user) 
    end 

    def admin_user 
     redirect_to(root_url) unless current_user.admin? 
    end 
end 

This is the list Showing on localhost:3000

This is the list showing at Herokuapp.com

內容index.html.erb的內容

<% provide(:title, 'All users') %> 
<h2>All users</h2> 

<%= will_paginate %> 

<ul class="users"> 
    <% @users.each do |user| %> 
    <%= render @users %>    <!--"render user" or "render @user" in Rails will search for _user.html.erb file--> 

    <% end %> 
</ul> 

<%= will_paginate %> 

告訴我是否需要發佈更多代碼。

回答

1

首先在你的每個塊你正在渲染每個用戶的所有用戶。也許你會想這個改變:

<% @users.each do |user| %> 
    <%= render @users %> 
    <% end %> 

這樣:

<% @users.each do |user| %> 
    <%= render user%> 
    <% end %> 

其次,無論你什麼時候有順序的問題是什麼SQL查詢的每一頁上執行結帳(調整你的日誌級別:debug上Heroku來看看那些)。依靠自動排序被認爲是一種不好的做法,並且總是更好地明確指定像這樣的排序列:

@users = User.order(:id).paginate(page: params[:page]) # default order always is ASC 
+0

請問您可以設置日誌級別爲:debug on heroku。 – Abhinay

+1

您可以在您的環境文件中設置日誌級別,不要忘記檢查您的Heroku應用使用的是哪種環境,默認情況下它是生產環境。所以,如果你還沒有觸及Heroku配置,你可能想調整production.rb 通過編寫'render @ users',你傳遞整個數組來渲染方法。但顯然你想傳遞一個SINGLE用戶,因爲你已經在遍歷列表。我檢查了教程,實際上作者正在做的一切正確,你的代碼是錯誤的: http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#code-index_view_first_refactoring –

+0

ohh ok ok now i明白了..你是對的..「渲染@用戶」不需要迭代。對不起,這是我的錯誤..感謝很多朋友:) – Abhinay

相關問題