我使用Ruby on Rails中的IF语句来尝试和测试是否设置了请求参数。无论是否设置了两个参数,都会触发下面if块的第一部分。我怎么能让这部分只被触发,如果两个params[:one]和params[:two]都设置了?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
我使用Ruby on Rails中的IF语句来尝试和测试是否设置了请求参数。无论是否设置了两个参数,都会触发下面if块的第一部分。我怎么能让这部分只被触发,如果两个params[:one]和params[:two]都设置了?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
当前回答
我试了一个晚,但从远处回答:
如果你想知道一个(任意)散列中的值是否被设置,以上所有的答案都是true,这取决于它们的观点。
如果你想测试你的(GET/POST..)参数,你应该使用一些更特殊的东西来期望params[:one]的值,比如
if params[:one]~=/ / and params[:two]~=/[a-z]xy/
忽略参数(GET/POST),如果他们没有设置,如果他们不符合预期
只是一个if params[:one]有或没有nil/true检测是打开你的页面进行黑客攻击的第一步,因为,它通常是下一步使用像select…其中params[:one]…,无论是否有意,主动或在框架内或之后。
一个答案或者只是一个暗示
其他回答
if params[:one] && params[:two]
... do something ...
elsif params[:one]
... do something ...
end
简单如馅饼:
if !params[:one].nil? and !params[:two].nil?
#do something...
elsif !params[:one].nil?
#do something else...
elsif !params[:two].nil?
#do something extraordinary...
end
我是一个粉丝
params [:] .present吗?
只是因为它保持了params[sym]形式,所以更容易阅读。
我刚在RubyInRails类上读到这个 http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
你可以用空白?方法,该方法等价于params[:one].nil?| | params[:]空虚吗?
(如)
if params[:one].blank?
# do something if not exist
else
# do something if exist
end
params[:foo] ||= '默认值'