我将BackgroundJob作为
class BackgroundJob < ActiveRecord::Base
belongs_to :resource, polymorphic: true
end
这里的资源是消息表
class Message < ActiveRecord::Base
has_one :background_job, as: :resource
end
列消息:电子邮件,文本。 邮件的电子邮件列为
我想检索其资源电子邮件列等于“ demo@example.com”电子邮件的所有BackgroundJob对象。
我们如何实现上述background_jobs表?
消息是BackgroundJob对象的资源。
我正在使用mysql2数据库。
答案 0 :(得分:1)
您需要执行JOIN
,如下所示:
BackgroundJob.joins('INNER JOIN messages ON messages.id = background_jobs.resource_id AND background_jobs.resource_type = "Message"').where(messages: { email: 'demo@example.com' })
您不能使用ActiveRecord
内置机制来简单地编写joins(:resource)
,因为它是多态关联,甚至没有像resources
这样的表。这就是为什么您必须自己编写JOIN
子句的原因。