Rails通过关联继承has_many中的列

时间:2011-11-15 22:14:44

标签: ruby-on-rails

我对铁杆很陌生并且在挑战中遇到困难......

我有3个模型,user,skill和user_skill。

的usermodel

has_many :user_skills
has_many :skills, :through => :user_skills

UserSkillModel

belongs_to :user
belongs_to :skill

SkillModel

has_many :user_skills
has_many :users, :through => :user_skills

在我的UserSkill中,我有一个名为level的列,所以我的想法是,当我为用户分配技能时,我可以定义技能等级。整个关联设置正在我可以告诉,但我不知道如何获得与@ user.skills结果相关联的级别。

attributes: 
  id: 1
  name: Rails
  created_at: 
  updated_at: 

2 个答案:

答案 0 :(得分:2)

我认为这是解决问题的好方法:

class UserSkill
  belongs_to :user
  belongs_to :skill

  delegate :name, :to => :skill
end

示例:

@user_skills = @user.user_skills(:include => :skill).all

@user_skills.each do |user_skill|
  user_skill.name
  user_skill.level
end

答案 1 :(得分:0)

以下是您可以采取的措施:

@user.user_skills.each do |user_skill|
  skill_name = user_skill.skill.name
  level = user_skill.level
end

这将为您提供技能的名称以及用户拥有的每项技能的技能等级。

如果您有用户和技能,并且想要找到该级别,则可以创建用户功能

def skill_level(skill)
  self.user_skills.find_by_skill(skill).level
end

然后打电话

@user.skill_level(skill)