Есть ли Rails эквивалент PHP isset()?
В основном просто проверка, чтобы убедиться, что параметр URL был установлен. Как я буду делать это в PHP:
if(isset($_POST['foo']) && isset($_POST['bar'])){}
Является ли это грубым/лучшим эквивалентом isset() в RoR?
if(!params['foo'].nil? && !params['bar'].nil?) end
Ответы
Ответ 1
Чем ближе совпадение, тем лучше #present?
# returns true if not nil and not blank
params['foo'].present?
Существует также несколько других методов
# returns true if nil
params['foo'].nil?
# returns true if nil or empty
params['foo'].blank?
Ответ 2
Вы также можете использовать defined?
См. пример: http://www.tutorialspoint.com/ruby/ruby_operators.htm
foo = 42
defined? foo # => "local-variable"
defined? $_ # => "global-variable"
defined? bar # => nil (undefined)
Еще много примеров на связанной странице.
Ответ 3
Да. .nil?
является эквивалентом isset()
в этом случае при проверке наличия ключа в Hash
.
Вы должны использовать метод Hash
key?
, который возвращает true
, если данный ключ присутствует в ресивере:
if(params.key?('foo') && params.key?('bar')) end
Ответ 4
Я думаю, что самое главное, когда вы переходите с PHP на ROR, понимаете, что в Ruby все верно, кроме false и nil
Итак, ваш код:
if(!params['foo'].nil? && !params['bar'].nil?){}
эквивалентен для:
if(params['foo'] && params['bar']) end
и это полный эквивалент для вашего PHP-кода.