Rails将模型添加到另一个模型两次

时间:2014-10-06 01:46:26

标签: ruby-on-rails

我最近碰到了一些场景,我需要多次将模型添加到另一个模型。

示例:

假设用户有帖子。但该帖子也应该能够与其他用户共享,以便这些用户可以查看/编辑该帖子。因此帖子应属于用户,但也应该有一组用户也可以编辑它。

或者说调查应该有很多问题,但也应该有一些问题是单独的筛选问题。因此,调查应该有很多问题,但也可能有很多筛选问题。

我如何添加第二个db字段,指向与不同字段相同的模型?现在,帖子会有user_id:integer,每个问题都会有survey_id:integer

对于有问题的调查,我想我可能只是在问题中添加“筛选”布尔属性,然后将所有问题添加到survey.questions数组中,并通过筛选属性进行筛选。但我不确定这是最好的路线。

我不知道如何处理用户模型的共享帖子,因为用户has_many发布了帖子,但每个帖子都可以与其他多个用户共享。

1 个答案:

答案 0 :(得分:2)

Looks like you need a has_many, :through relation

您将user_id卸载到不同的表格(由自定义模型定义,例如PostRelation),其中列如下:
user_id | post_id | kind | created_at | updated_at

您可以在kind列上定义关系类型(例如“查看”,“修改”,“所有者”),post_iduser_id不言自明。< / p>

在这种情况下,关系将是:

  • 发布has_many :users, through: :post_relation
  • 发布has_many :post_relations
  • 用户has_many :posts, through: :post_relation
  • 用户has_many :post_relations
  • PostRelation belongs_to :user
  • PostRelation belongs_to :post

然后在user / posts模型中,您可以定义根据PostRelation状态过滤帖子的自定义方法:

class Post def editors self.post_relations.includes(:users).where(kind: 'edit') end end