2013-07-27 2 views
0

Я noobie, и я пытаюсь просто получить все записи в базе данных и отобразить их в алфавитном порядке. Всякий раз, когда я показываю индексную страницу, записи всегда сортируются по убыванию по их идентификатору. Я использовал консоль, чтобы попробовать позвонить 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") Это должно решить вашу проблему.

Смежные вопросы