ActiveRecord Limit显示的记录少于存在

时间:2014-03-19 14:26:59

标签: ruby-on-rails activerecord ruby-on-rails-4

我正在尝试显示父记录的索引,包含一个急切加载的子级,根据子字段对它们进行排序,然后分页。此功能无需添加Limit(或paginate)命令即可运行,但使用它时,我只能在我的数据库中收到50条记录。我一直撞着墙试图找出我在这里做错了什么。我将从简化的Schema开始,然后是模型,最后是我的索引控制器函数。

架构:

ActiveRecord::Schema.define(version: 20140307193043) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "envs", force: true do |t|
    t.string   "name"
    ...
  end

  add_index "envs", ["name"], name: "index_envs_on_name", unique: true, using: :btree

  create_table "updateresults", force: true do |t|
    t.string   "env_name"
    ...
  end

  add_index "updateresults", ["env_name", "created_at"], name: "index_updateresults_on_env_name_and_created_at", using: :btree

end

环境模型

Class Env < ActiveRecord::Base
    has_many :updateresults, foreign_key: :env_name, primary_key: :name,
                            dependent: :destroy
    has_one :current_status, -> { order 'created_at DESC' },
                            foreign_key: :env_name, primary_key: :name,
                            class_name: 'Updateresult'
    validates :name, presence: true, length: { minimum: 3, maximum: 20 },
                            uniqueness: { case_sensitive: false }
end

Updateresult模型

class Updateresult < ActiveRecord::Base
    belongs_to :env, foreign_key: :env_name, primary_key: :name
    default_scope -> { order('created_at DESC') }
end

环境控制器

  def index
    @envs = Env.includes(:current_status).order('updateresults.value asc, name asc').paginate(page: params[:page])
  end

SQL for good measure

SELECT "envs"."id" AS t0_r0, "envs"."name" AS t0_r1, "envs"."created_at" AS t0_r2, "envs"."updated_at" AS t0_r3, "updateresults"."id" AS t1_r0, "updateresults"."content" AS t1_r1, "updateresults"."created_at" AS t1_r2, "updateresults"."updated_at" AS t1_r3, "updateresults"."env_name" AS t1_r4, "updateresults"."version" AS t1_r5, "updateresults"."bbj_status" AS t1_r6, "updateresults"."host" AS t1_r7, "updateresults"."repo" AS t1_r8 FROM "envs" LEFT OUTER JOIN "updateresults" ON "updateresults"."env_name" = "envs"."name" ORDER BY updateresults.repo asc, name asc LIMIT 30

另外值得一提的是,这个测试冻结了RSpec

expect(page).to have_selector('li', text: env.name)

0 个答案:

没有答案