是否有一个Rails相当于PHP的isset()?

key*_*red 37 ruby ruby-on-rails

基本上只需要检查以确保设置了URL参数.我是如何用PHP完成的:

if(isset($_POST['foo']) && isset($_POST['bar'])){}
Run Code Online (Sandbox Code Playgroud)

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

if(!params['foo'].nil? && !params['bar'].nil?) end
Run Code Online (Sandbox Code Playgroud)

Sim*_*tti 49

可能是更接近的匹配 #present?

# returns true if not nil and not blank
params['foo'].present?
Run Code Online (Sandbox Code Playgroud)

还有一些其他方法

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

# returns true if nil or empty
params['foo'].blank?
Run Code Online (Sandbox Code Playgroud)

  • 我说更接近,不平等.我还提出了一些替代方案. (5认同)

And*_*rew 25

你也可以使用 defined?

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

foo = 42
defined? foo    # => "local-variable"
defined? $_     # => "global-variable"
defined? bar    # => nil (undefined)
Run Code Online (Sandbox Code Playgroud)

链接页面上有更多示例.

  • 这个应该是公认的答案.如果有人尝试编写variable.present?还是变量.nil?对于未初始化的变量,ruby就会爆炸.:) (2认同)

Jac*_*kin 11

是.在这种情况下检查a中是否存在密钥.nil?是等效的.isset() Hash

你应该使用Hash's key?方法,true如果接收者中存在给定的键,则返回:

if(params.key?('foo') && params.key?('bar')) end
Run Code Online (Sandbox Code Playgroud)


Bit*_*rse 5

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

所以,你的代码:

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

相当于:

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

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