【问题标题】:Best way to implement has_n实现 has_n 的最佳方法
【发布时间】:2012-05-22 13:07:59
【问题描述】:

对于给定的n,您将如何在 Rails 上实现has_n 关联?比如说一个橄榄球队。它有15名球员。您是将其实现为has_many 并在保存前签入以确保它有15 个玩家,还是您更愿意将其实现为15 belongs_to?请注意,在这种情况下,顺序很重要。

【问题讨论】:

  • 我认为你的问题与这个question直接相关。
  • 我认为这没有直接关系。该问题使用连接表。这里不需要。

标签: ruby-on-rails model-view-controller database-design


【解决方案1】:

我更喜欢通过has_many 制作它,并在添加新玩家时验证玩家数量。

我认为这是建立一对多关系的正确方法。

【讨论】:

    【解决方案2】:

    已编辑以反映您的订购请求...

    您需要在 player 表中添加一个 sort_key。您可以使用整数,但浮点数始终是更灵活的选择。然后使用:order => "sort_key" 短语。

    class Team < ActiveRecord::Base
      has_many :players, :order => "sort_key", :inverse_of => :team
    end
    
    class Player < ActiveRecord::Base
      belongs_to :team, :inverse_of => :players
    
      validate :validate_players_count, :on => :create
      def validate_players_count
        if team.players.size > 15
          errors[:base] << "a team can only have 15 players"
        end
      end
    end
    

    【讨论】:

    • 那么如何将第一个位置的玩家更改为第四个位置的玩家?
    • 编辑了我的答案以反映订购请求。
    • 谢谢,这正是我所需要的。现在要改变两个位置的玩家,我所要做的就是更新排序键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多