Rails: методы в областях - PullRequest
       2

Rails: методы в областях

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

У меня есть следующий метод на одной из моих моделей:

  def remaining_stock
    if initial_stock
      initial_stock - bought_items
    else
      0
    end
  end

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

@remaining_items = Item.where(:user_id => current_user.id).{somehow specify that remaining stock > 0}

Метод будет выглядеть примерно так:

def has_remaining_stock
  remaining_stock > 0
end

Но я не могу понять, как добавить это к самому запросу.или какая-то область видимости, которая использует has_remaining_stock (я могу использовать область действия: условия, но не другие методы)

Любые идеи приветствуются.

Ответы [ 2 ]

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

Я полагаю, что вы можете сделать это следующим образом:

scope :has_remaining_stock, where("(initial_stock - bought_items) > 0)")
0 голосов
/ 06 ноября 2011

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

.where("initial_stock = NULL or (initial_stock - bought_items) > 0")

должно работать.Вы можете упаковать это как область применения вашей модели для более чистой семантики.Вам просто нужно выразить функцию в условии SQL.

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