2010-09-24 2 views
0

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

В модели:

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 
+0

Содержит ли набор результатов более чем в одной строке? Если это так, вы можете вернуть «истину» на основе значения последней строки, так как ваш «каждый» блок будет выполняться для всех строк в наборе. – zetetic

+0

Я забыл упомянуть, что набор результатов будет содержать только одну строку. – oprogfrogo

+0

Можете ли вы объяснить, что является результатом запроса sql? – Bohdan

ответ

0

Я хотел бы написать это несколько иначе. Вы перебираете все элементы, но вас интересует только первый элемент. Вы возвращаетесь из итерационного блока, но для каждого элемента будет выполнен блок. В 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]) 
+0

nathanvda, спасибо за ответ. Могли бы вы объяснить, как я это сделаю, если захочу проверить «сумму» на два значения, выбранных из БД? – oprogfrogo

+0

Вам нужно было бы сделать два запроса и сделать что-то вроде 'result_from_query1 [0] .price.round (2) <1.00 && result_from_query2 [0] .price> 135'. Что-то вроде того? Не уверен, что я понимаю, что вы имеете в виду. – nathanvda

Смежные вопросы