【问题标题】:what is the best way to create "one" to "one or two" relation in rails models?在 Rails 模型中创建“一”到“一或二”关系的最佳方法是什么?
【发布时间】:2012-11-25 23:05:10
【问题描述】:

假设我们有一名足球运动员,该球员只能拥有一两支球队,我的意思是他可能在俱乐部球队和/或国家队,或者什么都不是。在 Rails 关系中执行此操作的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails database ruby-on-rails-3 ruby-on-rails-3.1


    【解决方案1】:

    我将为每种团队类型创建has_one 关系。也许你打电话给一个club_team 和另一个national_team。不要使这些关系成为必需。这将实现您在玩家和团队之间允许 0、1 或 2 种关系的目标。

    您可以通过重命名模型中的关系来完成此操作。例如,如果您有一个名为 FootballTeam 的模型,那么您可以有两个这样的关系:

    has_one club_team, :class_name => "FootballTeam"
    has_one national_team, :class_name => "FootballTeam"
    

    如果player 是您的播放器模型的一个实例,这还将为您提供player.club_teamplayer.national_team 之类的方法。

    【讨论】:

    • 太好了,你的意思是我应该创建两个模型,national_team 和 club_team 对吧?但它们完全共享相同的属性和行为。我应该实施它们吗?
    • 您实际上不需要创建两个模型。两支球队都可以是“FootballTeam”模型的实例。如果两种类型的团队共享相同的属性和行为,那么执行两次将违反不重复自己的 DRY 原则。您费心重命名关联的全部原因是,当它们实际上是同一模型的实例时,您可以用不同的名称引用它们。
    • 请再问一个问题:),我如何在数据库级别做到这一点?我的意思是数据库中的关系?。
    • 您的Players 表中需要一个club_team_id 和一个national_team_id。
    【解决方案2】:

    您只需要Players 表中的:teams 列,该列接受一串代表团队的ID。一个数字表示一个团队,两个(逗号分隔或其他)数字表示两个,无表示没有。

    【讨论】:

    • 但是数据库插入和查询会很困难,我认为它不推荐在数据库世界中。
    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2015-10-15
    • 2010-12-28
    相关资源
    最近更新 更多