-1

私は2つのモデルを持っています:

Subscriber
  - id
  - name:string
  - email:string

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

彼らは何の関係もありません。

サブスクライバーからすべての行を選択し、URLが「some/path」に等しい送信テーブルに挿入された電子メールアドレスを持つ行を除外したいと思います。

Railsでこれを達成するための最もエレガントな方法は何ですか?

4

1 に答える 1

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)"])

ネストされたselectクエリを記述したくない場合は、次のこともできます。

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

私はそれをテストしませんでした、しかしそれはこれらの線に沿った何かであるはずです。

于 2012-04-23T13:05:40.983 に答える