繁体   English   中英

具有变量关联的模型实例。 有没有更好的方法来做到这一点?

Model instances with variable association. Is there a better way to do this?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经研究了一个复杂的数据结构,我想知道是否应该使用不同的模式。

我有 4 个模型,它们是相互依赖的ShiftDayClusterSchedule

  • Cluster有一个日期和许多Schedules
  • Day有一个最近到Day日期的Cluster (但不一定相同)和许多Shifts
  • 如果最近的Cluster具有与Shift对应的Schedule ,则ShiftsDay有效。

DayCluster之间没有关联,因为我希望能够通过简单地添加一个Cluster来为Clusters的日期之间的所有Days添加班次。

我在应用程序/模型中的关联在这里缩写:

class Cluster < ApplicationRecord
  has_many :schedules, dependent: :destroy
end

class Schedule < ApplicationRecord
  belongs_to :cluster
end

class Day < ApplicationRecord
  has_many :shifts
end

class Shift < ApplicationRecord
  belongs_to :day
end

我知道最简单的方法是完全消除ClusterSchedule类,并将Schedule属性直接存储在Shift对象上,但是如果开始时间发生变化,或者添加了一个班次,我希望所有受影响的班次自动更新,而不需要必须为受该更改影响的每个班次访问数据库。

class Day
  def cluster
    @cluster ||= Cluster.most_recent_to date
  end 
end

class Cluster
class << self
  def most_recent_to date
    find_by(date: date_most_recent_to(date))
  end

  def date_most_recent_to date
    date_comparison { |x| x <= date }.first
  end

  def date_comparison &date_comp
    all_dates.select(&date_comp)
  end

  def all_dates
    all.pluck(:date).sort.reverse
  end
end
end

当前的结构适用于我正在做的事情,但由于类的相互依赖性,它很容易出错和损坏。

是否有更好的抽象来表示模型之间的变量关联?

1 个回复

由于您的数据结构将大量潜在的冗余数据压缩到更少的行中,因此您可以获得快速修改它的能力,以换取更艰难的阅读时间。 如果没有适当的约束,您可能会发现,最终可能会得到无意义的数据。 但是,如果您按照您提到的方式展开您的数据,并且只有一个包含日程安排和班次的天数列表,您最终可能会遇到更严重的不一致。

两个想法。 首先,我建议在组合中添加更多约束。 例如,两个 Clusters 或两个 Days 具有相同的日期是没有意义的,对吗? 因此,将validates_uniqueness_of :date添加到这些模型(和/或唯一的数据库约束)中。 您可能会想到其他限制,但在不了解您的架构的情况下,我很难提供其他建议。

其次,通过它们的date属性将集群动态附加到 Days 可以为您节省一点时间,但这可能会给您带来更多的麻烦。 考虑直接让每一天belongs_to :cluster 为了弥补修改计划的难度,请使用表单更新 UI,以将给定的集群快速应用于一系列天数。

PS如果您不接受我的第二个建议,您可以通过在计算中依靠数据库来稍微简化您的代码并避免将整个关系加载到内存中( all_dates会在您扩展时all_dates您的性能):

class Day
  def cluster
    @cluster ||= Cluster.where("date <= ?", date).order(date: :desc).first
  end 
end
1 主动管理宝石模型协会。

我刚刚开始使用Active Admin Gem。 我有一个问题,我想知道是否有人可以解决。 我有两个模型 小狗 种鸡 使用我的应用程序,我希望能够 找到狗的品种,然后在查看狗的同时列出饲养员列表。 当我拜访种犬时(显示页面),我希望能够看到它们所拥有的犬 ...

4 关联范围-哪种方法更好?

我有两种做类似事情的方法,并且想知道:1.哪个对数据库的“需求”较少?,2.哪个更快?,3.占用的内存更少?以及4.如果存在比较两者时我需要考虑的任何其他问题。 基本上,我有一个具有多个交流的事件模型。 我需要针对按“长”和“短”类型排序的事件进行交换。 第一种方式是这样的: ...

8 进行多对多关联的更好方法是哪种?

嘿,大家,在我最后的问题链接中 ,在Trip给出的答案中,他说: 但是,不必在迁移中创建Rails中的联接表。 可以专门在模型中完成。 我应该像代码一样使用连接表,还是不使用:though连接表? 哪个正确的方法去? ...

10 Rails嵌套关联。 在渲染中:json

现有问题已经让我达到了我想要的90%,但是有一个障碍。 我有一个CheckIns模型和一个Person模型。 CheckIns属于People 。 在我的控制器中,我有这个代码: 对于每个CheckIn ,我想将关联的Person嵌套在其中。 过去的StackOverfl ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM