【发布时间】:2018-11-16 10:07:48
【问题描述】:
我有一个Flag 模型,该模型通过FlagInstance 和该表上的多态flaggable 连接到多个其他对象:
table 'flag_instances'
flag_id
flaggable_id
flaggable_type
.....
有了 many_through,我可以获取任何可标记的对象,例如 user.flags,这很棒。
但是我试图标记有错误的对象并通知其他对象,所以我添加了
table 'flag_instances'
flag_id
flaggable_id
flaggable_type
notifiable_id
notifiable_type
.....
问题是,User 可以有一个标志,并且可以通知一个标志。所以user.flags 不够具体,无法告诉我哪个是flag,哪个是flag 的通知。
我想我需要改变关系:
user.rb
has_many :flag_instances, as: :flaggable, dependent: :destroy
has_many :flags, through: :flag_instances
has_many :flag_instances, as: :notifiable, dependent: :destroy
has_many :flags, through: :flag_instances
但我不确定将它们更改为什么。有人可以提出解决方案吗?
注意:标志和标志通知都可以属于多个对象,所以它们都需要保持多态性。
谢谢
【问题讨论】:
-
标志和通知必须在同一个条目中吗?我的意思是当一个 flag_instances 条目是一个标志时,它也可以同时是通知吗?即单个条目在所有 4 个中都有值:
flaggable_id, flaggable_type, notifiable_id, and notifiable_type列? -
是的,每个条目都将始终填充所有 4 个条目。有时它们会包含相同的对象,但通常是不同的对象(例如,将 AccessToken 标记为过期并通知用户)
标签: ruby-on-rails ruby ruby-on-rails-5 polymorphic-associations