Поиск активной записи с использованием условий, между двумя числами с плавающей запятой

#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)