有没有一个Rails相当于PHP isset()?

时间:2011-02-17 23:09:54

标签: ruby-on-rails ruby

基本上只是检查以确保设置了URL参数。我是怎么用PHP做的:

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

这是RoR中isset()的粗略/最佳等效吗?

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

4 个答案:

答案 0 :(得分:49)

较近的匹配可能是#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?

答案 1 :(得分:25)

您也可以使用defined?

请参阅以下示例:http://www.tutorialspoint.com/ruby/ruby_operators.htm

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

链接页面上的更多示例。

答案 2 :(得分:11)

是。在检查.nil?中是否存在密钥时,isset()相当于Hash

您应该使用Hash的{​​{3}}方法,如果接收方中存在给定的密钥,则返回true

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

答案 3 :(得分:5)

我认为最重要的是,当你从PHP迁移到ROR时,理解的事实是在Ruby中除了false和nil之外一切都是正确的

所以,你的代码:

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

相当于:

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

这完全等同于您的PHP代码。