如何测试rails中是否存在参数
我在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
没有找到相关结果
已邀请:
14 个回复
降女陷费券
:
只要检查
就会被一个“那里但没有”和“那里但是错误”的价值所迷惑,而你却在询问是否存在。您可能需要区分: 根本不存在。 但是
。 但是
。 那里只有一个空字符串。 同样。如果没有更详细的确切情况,很难说。
细屠截殴些
仅仅因为它保留了
形式,因此更容易阅读。
粟痢凰副
如果它为空或零,则返回true 如果你正在测试布尔值,那将无法工作..因为
在这种情况下你可以使用
蹦吃舷弦
荤碗
徐百晴墓斜
佬棠
磐乓铝举
方法相当于
(例如)
募磷
当我想检查一个或两个以上的参数时,我倾向于使用上述解决方案。 .values_at返回和数组,其中nil代替任何未定义的param键。 即:
将返回以下内容:
.includes?(nil)然后检查数组是否有任何值。如果数组包含nil,它将返回true。 在某些情况下,您可能还需要检查params不包含并在false值上清空字符串。 您可以通过在unless语句上方添加以下代码来处理这些值。
它们一起看起来像这样:
请务必注意,delete_if将修改您的hash / params,因此请谨慎使用。 上面的解决方案显然需要更多的工作来设置,但是如果你检查的只是一两个参数,那么它是值得的。
膏焦凑
和
有更短的替代形式
和
。 Ruby团队还建议使用更短的替代方案,但为了便于阅读,有些人可能仍然喜欢这些方法的更长版本。 因此在你的情况下它会是这样的
NB!
将检查密钥是否存在并忽略任何可能的值。例如:
舞备联
第一行使用< = subset检查我们的目标键是否存在于params的键中?运营商。 Enumerable.all?如果任何值为nil或false,则每个默认值不带块返回false。
容淑阔九
然后按照以下方法:
马口
您还可以使用params [:two] .empty检查参数是否为空
抵舵
的价值,类似于
忽略参数(GET / POST),好像它们没有设置,如果它们不符合预期 只有一个
有或没有nil / true检测是打开你的页面进行黑客攻击的一步,因为,通常是下一步使用
,如果这是有意或无意,有效或在框架内或之后。 答案或只是一个提示