检索与Rails中关联资源的列之一匹配的对象

时间:2018-10-23 11:55:29

标签: ruby-on-rails activerecord mysql2

我将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数据库。

1 个答案:

答案 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子句的原因。