2013-07-27 37 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") 这应该可以解决您的问题。