我想根据两个模型创建一个双表格表格。
现在我可以创建一个包含社区成员的简单表格
列上的,我必须添加其他模型的信息,如下所示:
我的模特:
社区
has_many :memberships
成员
belongs_to :user
belongs_to :community
用户
has_many ::memberships
has_many :skills
技能
belongs_to :user
belongs_to :community
我有一些宝石存在制作双入口表或者从头开始更容易吗?如果是的话,我该如何开始?
答案 0 :(得分:3)
似乎你会从这里的直接关系中受益。
您可以执行以下操作,而不是直接从技能表中引用社区:
技能
belongs_to :user
has_many :communities, :through => :user
在用户上,添加:
has_many :communities, :through => :memberships
这不会得到你想要的技能和社区之间的联系吗?
答案 1 :(得分:1)
正如杰伊所说,你会受益于has_many :through关系,或者has_and_belongs_to_many relationship;这是否是我们必须看到的实际解决方案:
#app/models/user.rb
Class user < ActiveRecord::Base
has_many :memberships
has_many :skill_users
has_many :skills, through: :skill_users
end
#app/models/skill_user.rb
Class SkillUser < ActiveRecord::Base
belongs_to :skill
belongs_to :user
end
#app/models/skill.rb
Class Skill < ActiveRecord::Base
has_many :skill_users
has_many :users, through: :skill_users
end
这样,您就可以将每个user
(注意members
与用户不同)与特定技能相关联,而无需在表格中使用重复条目
您正在寻找的基础可以在关系数据库中找到
这些工作通过将数据存储在单个实例中,并通过foreign_keys
链接到其他数据。这些外键是诸如user_id
等之类的东西:
这意味着不是两次填充相同的数据,而是根据需要reference
来自其他模型的数据是正确的。这是join models
进入的地方
加入模型
加入模型允许您通过连接模型“链接”两个数据:
对于您来说,这意味着将您的技能存储在自己的模型中,并将用户与join model
上的技能相关联(我称之为skill_user.rb
)。这意味着您将能够像这样调用用户的技能:
@user.skills #-> goes through the join model