1

为每个空缺职位构建一个包含多个阶段的招聘应用程序。用户创建一个位置,然后在该位置内创建阶段。我希望能够将各个阶段强制按顺序排列,以便可以通过各个阶段处理申请人。

该订单稍后将是可编辑的(通过拖放),但现在我只需要它们默认为订单。

到目前为止,这是我的 phase.rb,底部有 set_sort_order:

class Phase < ActiveRecord::Base

  before_create :set_sort_order

  has_many :applicants

  belongs_to :position

  attr_accessible :name, :sort_order, :position_id

  private
  def set_sort_order
    self.sort_order||=self.position.phases.order(:sort_order).last.sort_order + 1
  end
end
4

1 回答 1

1

使用acts_as_list宝石

# Gemfile
gem 'acts_as_list'

# phase.rb
class Phase < ActiveRecord::Base
  acts_as_list :scope => :position, :column => :sort_order
  default_scope :order => 'sort_order'
  belongs_to :position
  # ...
end

以上基本上负责设置sort_order您的代码所做的事情。然而,我相信它的效率更高一些,因为它直接在 SQL 中做更多的工作。

此外,它添加了一系列方便的方法来在列表中移动记录(查看acts_as_list的代码以获取更多信息),同时保持sort_order值的顺序。所以添加到位置的第一个阶段将有sort_order = 1,第二个将是 2,依此类推。如果你使用这些方法来移动阶段,它会负责更新sort_order所有位置的其他阶段,所以它总是 1, 2, ... n

编辑:添加了一些解释和default_scope一行

于 2012-06-23T20:31:44.187 回答