铁轨双入口桌

时间:2014-02-14 07:30:03

标签: ruby-on-rails ruby-on-rails-3

我想根据两个模型创建一个双表格表格。

现在我可以创建一个包含社区成员的简单表格 normal table

列上的

,我必须添加其他模型的信息,如下所示: double entry table

我的模特:

社区

has_many :memberships

成员

belongs_to :user
belongs_to :community

用户

has_many ::memberships
has_many :skills

技能

belongs_to :user
belongs_to :community

我有一些宝石存在制作双入口表或者从头开始更容易吗?如果是的话,我该如何开始?

2 个答案:

答案 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与用户不同)与特定技能相关联,而无需在表格中使用重复条目


Relational

您正在寻找的基础可以在关系数据库中找到

这些工作通过将数据存储在单个实例中,并通过foreign_keys链接到其他数据。这些外键是诸如user_id等之类的东西:

enter image description here

more information here

这意味着不是两次填充相同的数据,而是根据需要reference来自其他模型的数据是正确的。这是join models进入的地方


加入模型

加入模型允许您通过连接模型“链接”两个数据:

enter image description here

对于您来说,这意味着将您的技能存储在自己的模型中,并将用户与join model上的技能相关联(我称之为skill_user.rb)。这意味着您将能够像这样调用用户的技能:

@user.skills #-> goes through the join model