37 votes

Existe-t-il un Rails équivalent à isset () de PHP?

Fondamentalement, juste une vérification pour vous assurer qu'un paramètre d'URL a été défini. Comment je le ferais en PHP:

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

Est-ce l'équivalent grossier / meilleur de isset () dans RoR?

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

49voto

Simone Carletti Points 77653

La correspondance la plus proche est probablement #present?

 # returns true if not nil and not blank
params['foo'].present?
 

Il existe également quelques autres méthodes

 # returns true if nil
params['foo'].nil?

# returns true if nil or empty
params['foo'].blank?
 

25voto

Andrew Points 14110

Vous pouvez également utiliser defined?

Voir l'exemple de: http://www.tutorialspoint.com/ruby/ruby_operators.htm

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

Beaucoup d'autres exemples sur la page liée.

11voto

Jacob Relkin Points 90729

Oui. .nil? est l'équivalent de isset() dans ce cas lors de la vérification de l'existence d'une clé dans un Hash .

Vous devez utiliser la méthode Hash de key? , qui renvoie true si la clé donnée est présente dans le récepteur:

 if(params.key?('foo') && params.key?('bar')) end
 

5voto

BitOfUniverse Points 2516

Je pense que la chose la plus importante, lorsque vous migrez de PHP vers ROR, est la compréhension du fait que dans Ruby tout est vrai sauf faux et nul

Donc, votre code:

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

est équivalent à:

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

et c'est l'équivalent complet de votre code PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X