我有一个SuccessCriterion
实现两者的模型,acts_as_tree
因此acts_as_list
可以将其排列为排序的树层次结构。每个成功标准都可以有很多Boilerplate
对象。
class SuccessCriterion < ActiveRecord::Base
has_many :boilerplates
acts_as_tree order: :position, dependent: :restrict_with_error
acts_as_list scope: [:parent_id]
end
class Boilerplate < ActiveRecord::Base
belongs_to :success_criterion
end
我可以通过调用 检索正确排序的所有成功标准的平面数组SuccessCriterion.collection_tree
。
现在列出样板时,我希望它们按成功标准的层次结构排序。最简单的方法是什么?我想我必须使用 Ruby 手动对集合进行排序,但我不确定该怎么做。
更新
我的第一次尝试如下,但感觉有点笨拙:
def index
# @boilerplates is provided by ransack
ordered_boilerplates = []
SuccessCriterion.collection_tree.each do |success_criterion|
ordered_boilerplates += @boilerplates.select do |boilerplate|
boilerplate.success_criterion_id == success_criterion.id
end
end
ordered_boilerplates += @boilerplates.select do |boilerplate|
boilerplate.success_criterion_id.nil?
end
@boilerplates = ordered_boilerplates
end