如何在模型之间实现多个关联?

时间:2018-06-05 12:57:33

标签: ruby-on-rails associations

我有4个型号。

  1. this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  2. UserModel
  3. SkillModel
  4. UserSkillModel
  5. 我使用的协会:

    PreferenceSkillModel

    架构:

    UserModel
    has_many :skills, through: :user_skills
    has_many :user_skills
    has_many :skills, :through: :preference_skills
    has_many :preference_skills
    
    SkillModel
    has_many :users, through: :user_skills
    has_many :users_skills
    has_many :users, :through: :preference_skills
    has_many :preference_skills
    
    UserSkillModel
    belongs_to :user
    belongs_to :skill
    
    PreferenceSkillModel
    belongs_to :user
    belongs_to :skill
    

    如何以正确的方式实现此关联?

2 个答案:

答案 0 :(得分:1)

我认为不需要单独user_skills& preference_skills个模型。 你可以在这里使用STI -

skill.rb     技巧< ApplicationRecord
    端

user_skill.rb

UserSkill < Skill
end

preference_skill.rb

PreferenceSkill < Skill
end
  

注意:我使用的Skill模型与您假设的模型不同。   您可能希望将当前的Skills模型重命名为更具说明性的名称,例如SkillDetail

在此之后,您可以拥有像< - p>这样的关联

class User < AR
  has_many :skills
  has_many :skill_details, through: :skills
end

class Skill < AR
  belongs_to :user
  belongs_to :skill_detail
end

class SkillDetail < AR
  has_many :skills
  has_many :users, through: :skills
end
  

P.S。对Single Table Inheritance (STI)

进行一些研究

希望这会有所帮助。 还要注意你有一个downvote,因为这是一个非常模糊的问题&amp;您直接要求实施业务逻辑。

答案 1 :(得分:1)

  

如何以正确的方式实现此关联?

什么是正确的可能取决于你想要做什么。以下是正确的,通过为users-skills和users-preference_skills指定单独的关联。

class User
  has_many :user_skills
  has_many :my_skills, through: :user_skills, class_name: 'Skill'
  has_many :preference_skills
  has_many :my_preference_skills, :through: :preference_skills, class_name: 'Skill'
  ...
end

class SkillModel
  has_many :users_skills
  has_many :direct_users, through: :user_skills, class_name: 'User'
  has_many :preference_skills
  has_many :preference_users, :through: :preference_skills, class_name: 'User'
  ...
end

如果您想要一个具有使用STI或多态性所需技能的集合。有关详细信息,请阅读Rails Guides