为每个未结头寸构建一个具有多个阶段的招聘应用程序。用户创建一个位置,然后在该位置创建阶段。我希望能够强制执行订单,以便可以通过阶段处理申请人。
订单稍后可以编辑(通过拖放),但是现在我只需要它们默认订单。
到目前为止,这是我的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
答案 0 :(得分:1)
# 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中直接起作用。
此外,它添加了一堆方便的方法来移动列表中的记录(look in acts_as_list
's code for more),同时保持sort_order
值的顺序。因此,添加到某个职位的第一阶段将为sort_order = 1
,第二阶段将为2,依此类推。如果你使用这些方法移动阶段,它会负责更新所有位置的其他阶段的sort_order
,所以它总是1,2,...... n 。
编辑:添加了一些说明和default_scope
行