私は持っている:
class Evaluation < ActiveRecord::Base
has_many :scores
end
class Score < ActiveRecord::Base
scope :for_disability_and_score,
lambda { |disability, score|
where('total_score >= ? AND name = ?', score, disability)
}
end
scores
テーブルにはフィールドtotal_score
とフィールドがありname
ます。
「ビジョン」という名前で 2 の評価を持ち、「ヒアリング」という名前で 3 の別の評価を持っているものだけを求める a をどのように書くことができますscope
か。私のパラメータで?evaluations
Score
total_score
Score
total_score
生のSQLでは、次のようになります。
I managed to do it in raw sql:
sql = %q-SELECT "evaluations".*
FROM "evaluations"
INNER JOIN "scores" AS s1 ON "s1"."evaluation_id" = "evaluations"."id"
INNER JOIN "target_disabilities" AS t1 ON "t1"."id" = "s1"."target_disability_id"
INNER JOIN "scores" AS s2 ON "s2"."evaluation_id" = "evaluations"."id"
INNER JOIN "target_disabilities" AS t2 ON "t2"."id" = "s2"."target_disability_id"
WHERE "t1"."name" = 'vision' AND (s1.total_score >= 1)
AND "t2"."name" = 'hearing' AND (s2.total_score >= 2)-
ここでのポイントは、これを繰り返すことです:
INNER JOIN "scores" AS s1 ON "s1"."evaluation_id" = "evaluations"."id"
そしてこれ(s1をs2とs3に置き換えるなど):
WHERE (s1.total_score >= 1)
しかし、それはこれを行うレールの方法でなければなりません... :)うまくいけば