【问题标题】:How can I automatically order/reorder a has_many association?如何自动排序/重新排序 has_many 关联?
【发布时间】:2023-03-29 07:18:01
【问题描述】:

我有一个 List 记录,每个 List 都有很多 Stage,将由用户创建/删除/移动。目前,我在阶段表上有一个“位置”列,用于跟踪阶段在列表中的位置,我只是按升序查询它们。但是,在删除阶段或需要将阶段插入列表中间的情况下,这会很复杂。这样做需要在插入/删除阶段的位置之后更新每个阶段的位置,这对我来说不是很干净。

这是我所拥有的一个准系统示例:

class List < ActiveRecord::Base
    has_many :stages
end

class Stage < ActiveRecord::Base
    default_scope { order(position: :asc) }
end

然后,如果我想做一些事情,比如在列表中间插入一个阶段,我需要这样做:

def insert(stage, position)
    stage.position = position
    stages.where('position >= ?', position).each { |stage| stage.update(position: stage.position + 1) }
    stages << stage
end

有什么方法可以轻松设置这些阶段的顺序,以便移动它们的顺序或删除不需要这么多手动更新的阶段?有点像 counter_cache 自动更新计数的方式

感谢您的帮助

【问题讨论】:

  • 我一直都是这样做的。也许有一个acts_as_something 可以实现这一点,但我不知道如何以另一种方式做到这一点。
  • acts_as_list 正是实现了这一点。
  • 哇,太完美了!非常感谢

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


【解决方案1】:

事实证明,有一个名为“acts_as_list”的宝石就是专门为这个东西制作的。 谢谢D方!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多