Области объединения таблиц для создания новой ассоциации - PullRequest
1 голос
/ 19 сентября 2019

Я хотел бы расширить таблицу соединений и создать новую ассоциацию.

В моей таблице соединений (PrestaMission) я храню два значения (: назначено и: предложено).Поэтому я хотел бы создать новую ассоциацию для создания двух has_many в моей модели.

Я дам вам код, он будет наиболее понятным.

Миссия модели:

class Mission < ApplicationRecord
  has_many :presta_missions, dependent: :destroy
end

Таблица соединений (PrestaMission)

class PrestaMission < ApplicationRecord
  belongs_to :client, polymorphic: true
  belongs_to :mission

  scope :assigned, -> { where(assigned: true) }
  scope :proposed, -> { where(proposed: true) }
end

И модель Keyper (которая является одним из клиентов PrestaMission)

class Keyper < ApplicationRecord
  has_many :presta_missions, as: :client, dependent: :destroy
  has_many :missions, through: :presta_missions

  has_many :assigned_prestas, -> { where(assigned: true) }, :class_name => 'PrestaMission'
  has_many :assigned_missions, through: :assigned_prestas

  has_many :proposed_prestas, -> { where(proposed: true) }, :class_name => 'PrestaMission'
  has_many :proposed_missions, through: :proposed_prestas
end

Но этот скрипт для связи ссылок в настоящее время неработает.Любое предложение?

1 Ответ

1 голос
/ 19 сентября 2019

Я нашел элегантное решение для решения этой проблемы:

  has_many :presta_missions, as: :client, dependent: :destroy
  has_many :missions, :through => :presta_missions do
    def assigneds
      where("presta_missions.assigned = ?", true)
    end
    def proposeds
      where("presta_missions.proposed = ?", true)
    end
  end

И чтобы вызвать эту ассоциацию, теперь вы можете использовать следующую команду

@keyper.missions.proposeds
OR
@keyper.missions.assigneds

Хорошо используйте и получайте удовольствие!!

...