Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无法对活动记录进行排序_Ruby On Rails_Sorting_Activerecord - Fatal编程技术网

Ruby on rails 无法对活动记录进行排序

Ruby on rails 无法对活动记录进行排序,ruby-on-rails,sorting,activerecord,Ruby On Rails,Sorting,Activerecord,我是一个不速之客,我试图简单地获取数据库中的所有记录,并按字母顺序显示它们。每当我显示索引页面时,记录总是按id降序排列。我使用控制台尝试调用EvalTest.order(“name”),然后我再次按id降序排列记录,而不是按名称。我是否需要在“名称”列上添加索引以按其排序?这似乎是答案应该很简单,但我似乎无法找出它 这是我的密码: User Model: class User < ActiveRecord::Base attr_accessible :name, :emai

我是一个不速之客,我试图简单地获取数据库中的所有记录,并按字母顺序显示它们。每当我显示索引页面时,记录总是按id降序排列。我使用控制台尝试调用EvalTest.order(“name”),然后我再次按id降序排列记录,而不是按名称。我是否需要在“名称”列上添加索引以按其排序?这似乎是答案应该很简单,但我似乎无法找出它

这是我的密码:

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+\-.]+@[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
用户模型:
类用户
评估测试模型:

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
class 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
class evaltestscocontroller
评估测试索引.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>

指数des测试

发生这种情况是因为您在模型中使用了默认范围。尝试
@eval\u tests=EvalTest.reorder(“名称”)

这应该可以解决您的问题。

ActiveRecord
是一个通用概念,适用于其他语言和库/框架。您应该更好地标记它,以获得更好的可见性和适当的帮助。编辑。