Могу ли я сделать это в Ruby? - PullRequest
1 голос
/ 24 марта 2011

В настоящее время у меня есть следующие 2 строки кода

errors.add_to_base I18n.t :error_message if value != 1
return false if !errors.blank?

Можно ли сжать это в 1 строку кода? Мне нужно сделать это в нескольких местах с разными сообщениями об ошибках и условиями. Кроме того, return false означает остановку потока жизненного цикла ActiveRecord.

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Вы можете воспользоваться преимуществами работы логических операторов и сделать что-то вроде этого:

value != 1 && errors.add_to_base I18n.t :error_message && return false

Не очень понятно, я бы не рекомендовал его использовать.Также, если errors.add_to_base возвращает что-то «ложное», возвращение false не произойдет.

Помните: «Всегда используйте код, как если бы человек, который будет поддерживать ваш код, является психопатом, который знает, где вы живете»1007 *

1 голос
/ 24 марта 2011

Хм.Если вы знаете, что errors.blank? будет истинным, пока не сработает первое условие, то:

(errors.add_to_base I18n.t :error_message; return) if value != 1

Обновление: Ага, вы готовы определить метод.Как насчет объекта Proc?Это лучше, чем метод здесь, в том, что если блок Proc возвращает, то вызов будет возвращен из окружающего метода.

test = Proc.new do |cond, msg|
  errors.add_to_base I18n.t msg if cond
  return unless errors.blank?
end
# ...
test.call value != 1, :error_message

Обратите внимание, что вам не нужно return false как простой return вернет nil, и этого будет достаточно, если какой-нибудь садист не сделает что-то вроде f().class == NilClass.:-)

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