#sql #ruby-on-rails #ruby-on-rails-3 #activerecord
#sql #ruby-on-rails #ruby-on-rails-3 #activerecord
Вопрос:
Я перепробовал все комбинации находок, которые я могу придумать, и не добился 100% успеха. Какой предпочтительный (или любой другой способ, который работает) способ сделать этот поиск:
При использовании where я получаю ошибку cannot iterate over float .
Question.where('id not in (?) AND rating.id = ? AND pvalue BETWEEN ?', not_in, rating_id, 0.0..100.0).limit(25)
При использовании хэша условий я не могу понять, как также ограничить результаты массивом. Итак, я попробовал два условия, но я не думаю, что часть ‘id not in (?) когда-либо превращается в sql…it возвращает результаты, которые находятся в массиве not_in.
Question.find_all_by_rating_id(rating_id, :limit=>25, :conditions => ['id not in (?)', not_in], :conditions=>{:pvalue => 0.0..100.0})
Приведенное выше пропускает первое условие (в любом случае, это выглядело неправильно, если там было два …) и возвращает
SELECT "questions".* FROM "questions" WHERE "questions"."rating_id" = 458 AND ("questions"."pvalue" BETWEEN 0.0 AND 100.0) LIMIT 25
Поэтому мне нужна комбинация условия хэша и идентификатора, который не находится в состоянии. Любая помощь приветствуется!
примечания: pvalue — это число с плавающей запятой, not_in — это массив идентификаторов, которые я не хочу, чтобы запрос возвращал.
Ответ №1:
Попробуйте
Question.where("id not in (?) AND rating.id = ? AND pvalue BETWEEN ? AND ?",
not_in,
rating_id,
0.0, 100.0
).limit(25)