我最近碰到了一些场景,我需要多次将模型添加到另一个模型。
示例:
假设用户有帖子。但该帖子也应该能够与其他用户共享,以便这些用户可以查看/编辑该帖子。因此帖子应属于用户,但也应该有一组用户也可以编辑它。
或者说调查应该有很多问题,但也应该有一些问题是单独的筛选问题。因此,调查应该有很多问题,但也可能有很多筛选问题。
我如何添加第二个db字段,指向与不同字段相同的模型?现在,帖子会有user_id:integer
,每个问题都会有survey_id:integer
。
对于有问题的调查,我想我可能只是在问题中添加“筛选”布尔属性,然后将所有问题添加到survey.questions数组中,并通过筛选属性进行筛选。但我不确定这是最好的路线。
我不知道如何处理用户模型的共享帖子,因为用户has_many
发布了帖子,但每个帖子都可以与其他多个用户共享。
答案 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_id
和user_id
不言自明。< / p>
在这种情况下,关系将是:
has_many :users, through: :post_relation
has_many :post_relations
has_many :posts, through: :post_relation
has_many :post_relations
belongs_to :user
belongs_to :post
然后在user / posts模型中,您可以定义根据PostRelation
状态过滤帖子的自定义方法:
class Post
def editors
self.post_relations.includes(:users).where(kind: 'edit')
end
end