2015-09-03 102 views
1

我有3個車型,如這個 -如何定義這三種模型之間的關係?

| User  | Skill  | SubSkills | 
|:-----------|------------:|:------------:| 
| Name  |Title  |  Title | 
| Trade  |Trade  | Done(bool)|  

模型應該注意哪些喜歡 -

class User < ActiveRecord::Base 
    has_and_belongs_to_many :skills 
end 

class Skill < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    has_many :sub_skills 
end 

class SubSkills < ActiveRecord::Base 
    belongs_to :user #not sure 
    belongs_to :skill 
end 

基本上技能都一樣爲同行業的每一位用戶和一個用戶有很多技巧。每項技能都有許多單項技能,但是針對特定用戶完成(或不完成)單項技能。

這可能嗎?什麼是設計這種關係的更好方法?這條路線將如何定義?像哪些資源將嵌套在哪個資源下?

回答

0

我認爲你是接近,但試試這個:

class SubSkills < ActiveRecord::Base 
    belongs_to :skill 
    has_one :user, through: :skill 
end 

的路由可以做多種方式:沒有嵌套,嵌套,淺築巢...等。 (檢出Rails Routing from the Outside In,特別是部分2.7.1 Limits to Nesting)。這真的取決於您的應用程序的需求。

你可以這樣做:

/users/:id/skills/:skill_id/sub_skills/:sub_skill_id

..thus在routes.rb你會:

resources :users do 
    resources :skills do 
    resources :sub_skills 
    end 
end 

如果你希望能夠直接從用戶訪問所有sub_skillsuser.sub_skills,而不是通過像user.skills.last.sub_skills這樣的特定技能,您必須將此關聯添加到User模型,如下所示:

class User < ActiveRecord::Base 
    has_and_belongs_to_many :skills 
    has_many :sub_skills, through: :skills 
end 
+0

我需要把'User belongs_to:sub_skill'?我是否需要在subskills表中放置一個用於user_id的外鍵? – krishna

+0

不,沒有。除非你想能夠做'user.sub_skills'。 –

+0

如果我在用戶中嵌套技能,那麼當我創建一個新技能時,我會有'new_skill_path(@user)'這樣的東西,所以不會爲那個特定用戶創建那個技能嗎?而我希望該技能屬於同一交易的每個用戶。但是,如果我在用戶之外嵌套技能,那麼對於某個特定用戶來說,如何標記一個子技能?(因爲子技巧嵌套在技能內) – krishna