Rails запрашивает внешнюю функцию - PullRequest
2 голосов
/ 15 ноября 2011

У меня есть список с именем modellist.Я хочу найти все экземпляры модели, где modellist [model.id]> 0 Как я могу сделать это с помощью запроса.сейчас у меня есть эта функция

finalmodels = []
@models.each do |model|
  if modellist[model.id] >0
     finalmodels.push(model)
  end
end
@models = finalmodels

Я хочу, чтобы то же самое было завершено с этим запросом, но я не могу понять это.так что-то типа

Model.where( ... modellist[model.id]>0)

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

Нашел решение, вот как оно идет (это не совсем правильно, но это самое близкое реальное решение, которое я могу придумать)

models = Model.find(:all).collect{|m| m }.reject{ |i| modellist[i.id] < 1 }

Сборная часть проходит через все модели (с параметром m) и присваивает значение после | m | (в этом случае м). После этого reject обрабатывается параметром i и отклоняется, когда условие (modellist [i.id] <1) является истинным утверждением. Вы также можете сделать что-то вроде </p>

models = Model.find(:all).collect{|m| (modellist[i.id] < 0)? m:otherval }

когда вам нужно одно из двух значений

0 голосов
/ 15 ноября 2011

Помните, что ваши запросы работают полностью в домене SQL, а не в домене Ruby, поэтому вы должны указать запрос в терминах вещей, которые могут быть предоставлены как часть запроса, таких как числовые или строковые значения, или условия, которые могутприменяться к значениям, хранящимся в базе данных.Сервер SQL не имеет сведений о внутреннем состоянии вашего приложения, кроме того, что вы предоставляете ему в запросе или ранее сохранили в состояние баз данных.

Ваша задача, как разработчика, состоит в том, чтобы выяснить, какпреобразовать состояние, которое у вас есть в приложении, во что-то, что база данных может выполнять.Возможно, это означает сохранение modellist в базе данных, чтобы его можно было включить в запрос, или это может означать переосмысление проблемы, чтобы найти другое решение, а не сражаться в войне, которую вы не можете выиграть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...