Этот вопрос довольно старый, но так как я сталкивался с этой проблемой пару раз и мне не понравилось ни одно из предложенных решений, я сам взломал что-то, что позволяет использовать несколько строк для true такие как «да», «вкл», «т» и наоборот для ложного.
Обезьяна исправит класс String, добавит метод для преобразования их в логическое значение и поместит этот файл в /config/initializers
, как предлагается здесь: Patching Monkey в Rails 3
class String
def to_bool
return true if ['true', '1', 'yes', 'on', 't'].include? self
return false if ['false', '0', 'no', 'off', 'f'].include? self
return nil
end
end
Обратите внимание, что если значение не является ни одним из допустимых значений true или false, оно возвращает nil. Это не то же самое для поиска ?paid=false
(вернуть все неоплаченные записи), чем ?paid=
(я не уточняю, должен ли он быть оплачен или нет - поэтому откажитесь от этого).
Тогда, следуя этому примеру, логика в вашем контроллере будет выглядеть так:
Something.where(:paid => params[:paid].to_bool) unless params[:paid].try(:to_bool).nil?
Это довольно аккуратно, и помогает содержать контроллеры / модели в чистоте.