代码之家  ›  专栏  ›  技术社区  ›  Seburdis

在轨道上从2到多

  •  1
  • Seburdis  · 技术社区  · 17 年前

    我有一个正在设计的Rails应用程序。我有一个单独的模型,只需要链接到一个模型中的2个。具体来说,我的“评估”有两个“成员”,一个评估者和一个被评估者。他们也有一些其他的信息,但他们不应该与此相关。

    最好的方法是什么?评估中的两个外键是最好的,还是评估与成员之间有许多关系?还有其他更好的选择吗?

    我起初会认为很多对很多,但由于在关系的一边有一个定义的数字,所以我质疑这里的适用性。据我所知,多对多通常意味着关系两边的数字是可变的。

    2 回复  |  直到 17 年前
        1
  •  1
  •   James A. Rosen    17 年前

    您可能需要两个不同的关联,可能是同一类的关联:

    class Member < ActiveRecord::Base
      has_many :evaluations_out, :class_name => 'evaluation', :as => :evaluator
      has_many :evaluations_in, :class_name => 'evaluation', :as => :evaluatee
    end
    
    class Evaluation < ActiveRecord::Base
      belongs_to :evaluator, :class_name => 'member'
      belongs_to :evaluatee, :class_name => 'member'
    end
    
        2
  •  0
  •   Javier    17 年前

    我自己还没有测试过,听起来可能有点冒险,但我认为这可能有效:

    评价模型

    class Evaluation < ActiveRecord::Base 
      belongs_to :evaluator, :class_name => "Member", :foreign_key => "evaluator_id"
      belongs_to :evaluatee, :class_name => "Member", :foreign_key => "evaluatee_id"
    
    end
    

    成员模型

    class Member < ActiveRecord::Base
      has_many :evaluators, :class_name => "Evaluation", :foreign_key => "evaluator_id"
      has_many :evaluatees, :class_name => "Evaluation", :foreign_key => "evaluatee_id"
    
    end