Ruby on rails 如何定义这三个模型之间的关系?
我有3个这样的模型-Ruby on rails 如何定义这三个模型之间的关系?,ruby-on-rails,model,relationship,has-and-belongs-to-many,Ruby On Rails,Model,Relationship,Has And Belongs To Many,我有3个这样的模型- | User | Skill | SubSkills | |:-----------|------------:|:------------:| | Name |Title | Title | | Trade |Trade | Done(bool)| 模型应该是什么样子的- class User < ActiveRecord::Base has_and
| 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
class用户
基本上,同一行业的每个用户的技能都是相同的,一个用户拥有多种技能。每项技能都有许多子技能,但为特定用户执行(或不执行)子技能。这可能吗?有什么更好的方式来设计这种关系?如何为此定义路线?例如,哪个资源将嵌套在哪个资源下?我认为您很接近,但请尝试以下方法:
class SubSkills < ActiveRecord::Base
belongs_to :skill
has_one :user, through: :skill
end
如果您希望能够直接从用户(如user.sub\u skills
)而不是通过特定技能(如user.skills.last.sub\u skills
)访问所有sub\u skills
),则必须将关联添加到user
模型中,如下所示:
class User < ActiveRecord::Base
has_and_belongs_to_many :skills
has_many :sub_skills, through: :skills
end
class用户
我想你很接近了,但试试这个:
class SubSkills < ActiveRecord::Base
belongs_to :skill
has_one :user, through: :skill
end
如果您希望能够直接从用户(如user.sub\u skills
)而不是通过特定技能(如user.skills.last.sub\u skills
)访问所有sub\u skills
),则必须将关联添加到user
模型中,如下所示:
class User < ActiveRecord::Base
has_and_belongs_to_many :skills
has_many :sub_skills, through: :skills
end
class用户
我是否需要将用户所属的技能设置为:sub\u skill
?我需要在subskills表中为user\u id添加外键吗?不需要,也不需要。除非您希望能够执行user.sub\u skills
。如果我在用户中嵌套技能,那么当我创建一个新技能时,我会有类似于new\u skill\u path(@user)
,那么这不会只为这一个特定用户创建该技能?而我希望这项技能属于同行业的每一位用户。但如果我将技能嵌套在用户之外,那么如何为特定用户标记子技能?(因为子技能嵌套在技能内部)如果是这种情况,您可能需要查看浅嵌套。资源嵌套只影响访问资源的路由和URL/路径。它不控制模型关系。但是,它们通常以某种方式对齐。所以,真的,你可以两者兼得。将技能和辅助技能嵌套在该用户关系的用户下,但也可在全球范围内用于所有技能/辅助技能。从外到内阅读Rails路由。是的,我使用浅嵌套,但即使在浅嵌套中,当您在嵌套资源中创建新项时,您也需要指定父项。如何避免指定父项?是否需要将用户所属的设置为:sub\u skill
?我需要在subskills表中为user\u id添加外键吗?不需要,也不需要。除非您希望能够执行user.sub\u skills
。如果我在用户中嵌套技能,那么当我创建一个新技能时,我会有类似于new\u skill\u path(@user)
,那么这不会只为这一个特定用户创建该技能?而我希望这项技能属于同行业的每一位用户。但如果我将技能嵌套在用户之外,那么如何为特定用户标记子技能?(因为子技能嵌套在技能内部)如果是这种情况,您可能需要查看浅嵌套。资源嵌套只影响访问资源的路由和URL/路径。它不控制模型关系。但是,它们通常以某种方式对齐。所以,真的,你可以两者兼得。将技能和辅助技能嵌套在该用户关系的用户下,但也可在全球范围内用于所有技能/辅助技能。从外到内阅读Rails路由。是的,我使用浅嵌套,但即使在浅嵌套中,当您在嵌套资源中创建新项时,您也需要指定父项。如何避免指定父级?