2011-11-15 15 views
0

イムレールにはかなり新しいアソシエーション経由にhas_manyで列を継承し、挑戦するとstumpled。私UserSkillでRailsは私が3つのモデル、ユーザー、スキルとuser_skillを持っている...</p> <p>を

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 

アイデアは私がユーザーにスキルを割り当てるときにということですので、私は、レベルと呼ばれる列を持っています私はスキルレベルを定義することができます。私が知る限り、協会全体の設定は機能していますが、どのようにレベルが@ user.skillsの結果に関連付けられているかわかりません。

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

答えて

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 
+0

名前のようにActiveRecordのdelegateメソッドは、delegatesメソッドを別のオブジェクトに推薦します。 http://edgeapi.rubyonrails.org/classes/Module.html#method-i-delegate – sparrovv

+0

魅力的な作品です!どうもありがとう! :-) –

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) 
関連する問題