Rails - запуск Flash-предупреждения с методом, возвращающим true - PullRequest
0 голосов
/ 24 сентября 2010

Я пытаюсь вызвать предупреждение, когда цена введена слишком низко. Но по какой-то причине он всегда возвращает true, и я вижу предупреждение независимо. Я уверен, что что-то не так в том, как я это делаю, поскольку я действительно новичок в RoR.

В модели:

def self.too_low(value)
  res = Class.find_by_sql("SELECT price ……. WHERE value = '#{value}'")
  res.each do |v|
    if #{value} < v.price.round(2)
      return true
    else
      return false
    end
  end
end

В контроллере:

@too_low = Class.too_low(params[:amount])
if @too_low == true
  flash[:warning] = 'Price is too low.'
end

1 Ответ

0 голосов
/ 25 сентября 2010

Я бы написал это несколько иначе. Вы перебираете все элементы, но вас интересует только первый элемент. Вы возвращаетесь изнутри блока итерации, но для каждого элемента блок будет выполнен. В ruby ​​1.9.2 это выдает ошибку.

Также я бы предложил использовать другое имя класса (Class используется для определения класса)

Итак, мое предложение:

Class YourGoodClassName

  def self.too_low(amount)
    res = YourGoodClassName.find_by_sql(...)
    if res.size > 0
      res[0].price.round(2) < 1.00
    else
      true
    end
  end

end

Вы можете видеть, как я проверяю, найден ли какой-либо результат, и если это так, я просто возвращаю значение теста (истинное или ложное); и вернуть true, если цена не была найдена.

В контроллере вы пишете что-то вроде

flash[:warning] = 'Price is too low' if YourGoodClassName.too_low(params[:amount])  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...