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