我有4个型号。
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
UserModel
SkillModel
UserSkillModel
我使用的协会:
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
如何以正确的方式实现此关联?
答案 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。