В Ruby on Rails передача локальных данных в представление, по умолчанию true, не будет работать с || = - PullRequest
0 голосов
/ 22 сентября 2010

, если код

do_more ||= true

, тогда, когда передается false, он становится

do_more = false || true

и, следовательно, все равно будет истинным.Так что это один случай, когда foo ||= default_value не будет работать?В этом случае это должно быть

do_more = true if !defined? do_more

?

1 Ответ

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

В целом, foo ||= default_value никогда не работает, если допустимое значение для foo равно false.

foo ||= default_value является допустимым шаблоном, только когда все действительные значения интерпретируются как логическое значение ИСТИНА.

Ваше утверждение do_more == true if !defined? do_more должно использовать оператор присваивания, я полагаю, опечатка: do_more = true if !defined? do_more

Может быть, лучше будет do_more = true unless defined? do_more

Это выглядит хорошо для меня, но вам нужно проверить, чтобы убедиться, что он работает правильно.

Если ваш параметр приходит из формы HTML, то неопределенный регистр на самом деле является строкой нулевой длины, "".Если это ваша ситуация, вам нужно:

do_more = true if do_more == ''

Я бы также предложил комментарий # set default

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