作用域联接表以构建新关联



我想限定连接表的范围并创建一个新关联。

在我的连接表(PrestaMission(中,我存储了两个值(:已分配和:p roposed(。因此,我想创建一个新关联以在我的模型中创建两个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

和模型键控器(它是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

但是此脚本到链接关联当前不起作用。有什么建议吗?

我找到了一个优雅的解决方案来解决这个问题:

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

好好利用,玩得开心!

最新更新