排名模型入门

时间:2015-05-22 15:11:22

标签: ruby-on-rails

我正在尝试在Rails 3.2中使用gem 'ranked-model'

这是模型:

class Costproject < ActiveRecord::Base
  include RankedModel
  scope :active, where("coststatus_id IN (?)", [2, 3, 4, 5, 6] ).where("project_year = ?", Time.now.year + 1)
  ranks :row_order,
        :scope => :active

我在Rails控制台中运行了这个:

Costproject.rank(:row_order).all

之后,所有记录中的列row_order都为空。

我做错了什么?

感谢您的帮助!

UPDATE1

我现在相信Costproject.rank(:row_order).all用于列出项目。我认为这是在列表中播种数字的命令。也许我不必这样做?

1 个答案:

答案 0 :(得分:0)

根据评论我们的谈话。在使用seed命令之前,问题似乎需要rank数据库。

因此,您可以通过rails console,使用您的应用或修改seeds.rb文件,通过几种方式为您的开发者数据库播种。

我建议您使用seeds.rb文件,因为它是幂等的(http://en.wikipedia.org/wiki/Idempotence

如果您没有,请打开db/seeds.rb或创建一个。

创建一些记录:

Costproject.create(rank_order: 3, coststatus_id: 2, project_year: 2016)
Costproject.create(rank_order: 2, coststatus_id: 2, project_year: 2016)
Costproject.create(rank_order: 1, coststatus_id: 2, project_year: 2016)

这将在costprojects表中插入3条记录。您必须将coststatus_id和project_year设置为范围的每个值。这些不会起作用:

Costproject.create(rank_order: 10)
Costproject.create(rank_order: 20, coststatus_id: 10)
Costproject.create(rank_order: 30, coststatus_id: 2, project_year: 2013)

然后通过终端你可以运行:

bundle exec rake db:seed

此rake任务将运行您的种子文件,就像您在rails console中手动输入一样。

现在你应该能够做Costproject.rank(:row_order).all。假设您在空数据库上运行种子文件,第一个模型的id为3

欲了解更多信息:

What is the best way to seed a database in Rails?

http://railscasts.com/episodes/179-seed-data

http://www.jasonwieringa.com/rake_rails_and_databases/