Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何定义这三个模型之间的关系?_Ruby On Rails_Model_Relationship_Has And Belongs To Many - Fatal编程技术网

Ruby on rails 如何定义这三个模型之间的关系?

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

我有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
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路由。是的,我使用浅嵌套,但即使在浅嵌套中,当您在嵌套资源中创建新项时,您也需要指定父项。如何避免指定父级?