Есть ли Rails, эквивалентный PHP isset ()? - PullRequest
37 голосов
/ 18 февраля 2011

По сути, это просто проверка, чтобы убедиться, что был задан параметр url. Как бы я это сделал в PHP:

if(isset($_POST['foo']) && isset($_POST['bar'])){}

Это грубый / лучший эквивалент isset () в RoR?

if(!params['foo'].nil? && !params['bar'].nil?) end

Ответы [ 4 ]

49 голосов
/ 18 февраля 2011

Более близкое совпадение, вероятно, #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?
25 голосов
/ 18 февраля 2011

Вы также можете использовать defined?

См. Пример из: http://www.tutorialspoint.com/ruby/ruby_operators.htm

foo = 42
defined? foo    # => "local-variable"
defined? $_     # => "global-variable"
defined? bar    # => nil (undefined)

Еще много примеров на связанной странице.

11 голосов
/ 18 февраля 2011

Да. .nil? является эквивалентом isset() в этом случае при проверке наличия ключа в Hash.

Вы должны использовать метод Hash key?, который возвращает true, если данный ключ присутствует в приемнике:

if(params.key?('foo') && params.key?('bar')) end
5 голосов
/ 18 февраля 2011

Я думаю, что наиболее важной вещью при переходе с PHP на ROR является понимание того факта, что в Ruby все верно, кроме false и nil

Итак, ваш код:

if(!params['foo'].nil? && !params['bar'].nil?){}

эквивалентно для:

if(params['foo'] && params['bar']) end

, и это полный эквивалент для вашего кода PHP.

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