从其他表中排除行

时间:2012-04-23 12:33:45

标签: ruby-on-rails ruby-on-rails-3

我有2个型号:

Subscriber
  - id
  - name:string
  - email:string

Submission
  - id
  - name:string
  - email:string
  - path:string
  - ip:string

他们没有任何关系。

我想从订阅者中选择所有行,并排除在提交表中插入电子邮件地址的行,其中url等于'some / path'。

使用Rails完成此任务的最优雅方法是什么?

1 个答案:

答案 0 :(得分:1)

我真的不明白你的意思:url等于'some / path' 但我想你可以把它作为一个额外的条件添加......

如果您使用正常的嵌套查询解决它,您将获得:

 SELECT *  
 FROM subscribers 
 WHERE email NOT IN (Select email FROM Submission)

因此,在活跃记录中,这将是:

 subscribers.all(:conditions => ["email NOT IN (SELECT email from Submission)"])

如果您不想编写嵌套的选择查询,您也可以这样做:

 emails = Submission.all
 subscribers.all(:conditions => ["email not in (?)", emails])

我没有测试它,但它应该是这些方面的东西。