ruby-on-rails - 如何创建双多态关联
问题描述
我的应用程序中有三种配置文件类型:
- 员工
- 顾客
- 供应商(供应商的员工)
我有许多不同的电子邮件跟踪:
- 电子邮件打开
- 电子邮件反弹
- 电子邮件点击
- 等等
他们每个人都有一个表,我想建立一个双重多态关联,例如一个配置文件可以有许多不同的 email_activities 和一个 email_activity 属于一个配置文件。
最初,只有一个电子邮件跟踪,因此多态关联如下所示:
# employee.rb, customer.rb, suppliee.rb
has_many :email_activities, as: :profile
# email_activity.rb
belongs_to :profile, polymorphic: true, optional: true
然而,现在有很多我仍然希望每个配置文件通过多态关联使用 email_activities 访问它们。
我目前拥有的代码如下所示:
# employee.rb, customer.rb, suppliee.rb
has_many :email_activities, polymorphic: true, as: :profile, dependent: :destroy
# email_open.rb, email_bounce.rb, email_click.rb, etc.
belongs_to :profile, polymorphic: true, as: :email_activity, optional: true
但是,每当我尝试访问个人资料的 email_activities 时,都会收到此错误:
Unknown key: :polymorphic
我想我使用的语法在这种情况下不太适用。我怎样才能让它工作?
解决方案
has_many
没有:polymorphic
钥匙,所以试试这个:
# employee.rb, customer.rb, suppliee.rb
has_many :email_activities, as: :profile, dependent: :destroy
# email_open.rb, email_bounce.rb, email_click.rb, etc.
belongs_to :profile, polymorphic: true, as: :email_activity
推荐阅读
- java - 我应该如何在没有 xml 的情况下加载 Spring 的 ApplicationContext 以进行单元测试?
- rust - 在多个函数中使用字符串的问题
- android - 使用 FileProvider 共享 DocumentFile
- c - 无法在其他计算机上运行带有库的 C 可执行文件
- postgresql - 解决 go 的 sqlx 中潜在的空字段
- firebird - 自主事务中的 Firebird 2.5 异常处理
- php - Mybb sceditor 额外字段
- xcode - SwiftUI macOS 运行功能以将菜单项设置为启用?
- c++ - 如果用户没有输入任何内容或输入错误,如何重新输入用户的输入?
- c# - 如何从总文本框中多次减去折扣文本框?