Рельсы ассоциируются 2 ключами - PullRequest
0 голосов
/ 04 февраля 2020

У меня 2 модели: уведомление, почта. В уведомлениях В уведомлении у меня есть столбцы, object_id и Notification_type. В object_id пишите id из почты, в messages_type - «почта». В будущем я хочу добавить к уведомлению другое название модели и связать его с ним, поэтому мне нужна ассоциация по идентификатору и типу модели. Теперь у меня есть ассоциация:

class Mail < ApplicationRecord
    has_many :notification, -> {where(notification_type: "mail") }, class_name: "Notification", foreign_key: "object_id"
end

Его работа, но я не знаю, как связаться в уведомлении, где будет взят тип уведомления. Я пытаюсь

class Notification < ApplicationRecord
   belongs_to :mail, class_name: "Mail", foreign_key: "object_id"
end

В этом случае тип уведомления не учитывается.

class Notification < ApplicationRecord
   belongs_to :mail, -> {where(notification_type: "mail") }, class_name: "Mail", foreign_key: "object_id"
end

Я получаю ошибку

ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR:  column mails.notification_type does not exist)
LINE 1: ...ils" WHERE "mails"."id" = $1 AND "mail...
                                                             ^
: SELECT  "mails".* FROM "mails" WHERE "mails"."id" = $1 AND "mails"."notification_type" = $2 LIMIT $3

Как я могу принять сотрудника в уведомлении модель?

1 Ответ

0 голосов
/ 04 февраля 2020

Может быть, вы хотите иметь составные первичные ключи? Если это так, вы можете сделать это https://github.com/composite-primary-keys/composite_primary_keys

class Membership < ActiveRecord::Base
  self.primary_keys = :user_id, :group_id
  belongs_to :user
  belongs_to :group
  has_many :statuses, :class_name => 'MembershipStatus', :foreign_key => [:user_id, :group_id]
end

Модель, связанная с моделью составного ключа, определяется следующим образом:

class MembershipStatus < ActiveRecord::Base
  belongs_to :membership, :foreign_key => [:user_id, :group_id]
end
...