属于同一模型的2个模型之间的ActiveRecord关联

时间:2016-08-18 23:24:14

标签: ruby-on-rails ruby activerecord

Rails新手,所以在这里忍受我。我需要有关如何在我的两个模型之间正确设置活动记录关联的建议。

目前看来,我有一个用户模型。用户has_many联系人。一个用户has_many帖子。简单地说:

rate(360,-665.3, 99000);
0.005916521358085446

rate(360,-958.63, 192000);
0.0036458502960158515

rate(180,-1302.96,192000);
0.0022917255526408564

rate(360, -889.19, 192000);
0.0031250616819306744

rate(360, -1145.8, 240000);
0.003333353153720964

用户可以向其中一个或多个联系人发送帖子(虽然该操作只是触发电子邮件的内容,但我需要能够跟踪并显示他们每个帖子发送的联系人)。他们可以向许多联系人发送帖子,他们可能(随着时间的推移)发送每个联系人超过1个帖子。

我有点不确定如何关联帖子和联系人。它只是一个简单的帖子has_many联系人(反之亦然)?或者应该是一个帖子通过用户通过联系?

虽然我通常是一个通过反复试验来学习的人,但这是我担心如果我走到错误的道路上的情况之一,我会很清楚地知道它会要撤消是痛苦的 - 所以感谢任何建议。

我正在使用Rails 5来获取它的价值。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是多对多的关系。由于帖子可以与许多联系人相关联,并且联系人可以与许多帖子相关联。

以下是对many-to-many relationship

的精彩解读

基本上,您将创建一个关联表来帮助链接帖子和联系人表。

class Contact < ApplicationRecord
  belongs_to :user
  has_many :posts, through: post_contact

class Post < ApplicationRecord
  belongs_to :user
  has_many :contacts, throught: post_contact

您将创建一个名为post_contact(或任何您想要的)的新连接表,该表提供了帖子和联系人之间的关联。

希望这有帮助。

答案 1 :(得分:1)

您不一定需要PostContacts之间的联接,即您可以写@post.user.contacts@contact.user.posts,但这取决于您的使用情况。< / p>

但是,您确实想要为Post创建一个关联,以获取同一用户的所有评论。你可以写:

class Post < ActiveRecord::Base
  has_many :contacts_of_user, through: :user, source: :contacts
end

您也可以使用相同的逻辑来实现contact.posts