Подтвердить что ты не робот

Есть ли Rails эквивалент PHP isset()?

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

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

Является ли это грубым/лучшим эквивалентом isset() в RoR?

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

Ответ 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-кода.