2013-07-27 42 views
0

我是一個noobie,我試圖簡單地獲取數據庫中的所有記錄並按字母順序顯示它們。每當我顯示索引頁時,記錄總是按其ID降序排列。我使用控制檯嘗試調用EvalTest.order(「name」),並且我一直按照降序排列順序排列記錄,而不是按名稱排序。我是否需要在名稱列上添加一個索引來對它進行排序?這似乎是答案應該是很容易,但我似乎無法推測出來......無法對活動記錄進行排序

這裏是我的代碼:

User Model: 

    class User < ActiveRecord::Base 
    attr_accessible :name, :email, :password, :password_confirmation 
    has_secure_password 
    has_many :eval_tests 

    before_save { |user| user.email = email.downcase } 
    before_save :create_remember_token 

    validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, 
        format:  { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 
    validates :password, presence: true, length: { minimum: 6 } 
    validates :password_confirmation, presence: true 
    after_validation { self.errors.messages.delete(:password_digest) } 

    private 

    def create_remember_token 
     self.remember_token = SecureRandom.urlsafe_base64 
    end 
end 

Eval_Test型號:

class EvalTest < ActiveRecord::Base 
    attr_accessible :description, :name 
    belongs_to :user 

    validates :user_id, presence: true 
    validates :name, presence: true 
    validates :description, presence: true, length: { maximum: 350 } 
    default_scope order: 'eval_tests.created_at DESC' 
end 

EvalTest控制器:

class EvalTestsController < ApplicationController 
    def show 
    @eval_test = EvalTest.find(params[:id]) 
    end 

    def new 
    @eval_test = EvalTest.new 
    end 

    def index 
    @eval_tests = EvalTest.order("name") 
    end 

    def create 
    @eval_test = current_user.eval_tests.build(params[:eval_test]) 
    if @eval_test.save 
     flash[:success] = "Nouveau test cree!" 
     redirect_to @eval_test 
    else 
     render 'new' 
    end 
    end 
end 

評估測試index.html.erb:

<% provide(:title, 'Index des tests') %> 
<h1>Index des tests</h1> 

<ul class="eval_tests"> 
    <% @eval_tests.each do |eval_test| %> 
    <li> 
     <%= link_to eval_test.name, eval_test %> 
    </li> 
    <% end %> 
</ul> 
+0

'ActiveRecord'是一個通用的概念,適用於其他語言和庫/框架。你應該更好地標記它以獲得更好的可視性和適當的幫助。編輯。 – MasterAM

回答

1

這是因爲您在模型中使用了默認範圍。嘗試 @eval_tests = EvalTest.reorder("name") 這應該可以解決您的問題。