1

has_many 関係を持つモデルと、次のような子があるかどうかを判断するスコープがあります。

  scope :with_nomination, :include => [:nomination], :conditions => "nominations.service_id IS NOT NULL"

これを使用して、私は次のようなことを行いService.with_nomination、指名された子供を持つすべてのサービスのリストを受け取ることができます.

Service.select("id, firstName, lastName").with_nomination問題は、私がエッセンスで ActiveRecord のようなことをするSELECT * FROM servicesと、非常に悪く、私が苦労して設定したインデックスを利用しないことです。

.select() コマンドで動作するようにクエリを言い換えるか、スコープを変更するにはどうすればよいですか?

4

2 に答える 2

0

私が使用していた構文では、select は不可能であるため、select * を実行し、それ以上の select は既にオーバーライドされています。

スコープを次のように書き直しました。

scope :no_nomination, joins("LEFT JOIN nominations ON nominations.service_id = services.id").where("nominations.service_id IS NULL")
# important distinction here, the left join allows you to find those records without children

scope :with_nomination, joins(:nomination).where("nominations.service_id IS NOT NULL")

この構文を使用すると、次のようなことができますService.select(:id,:user,:otherfield).with_nomination

于 2012-04-19T23:44:34.710 に答える