gpt4 book ai didi

ruby-on-rails - 仅当旧哈希中存在时才在新哈希中创建键值

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:59 24 4
gpt4 key购买 nike

conditions[:foo] = params[:foo] if params[:foo].present?

如果 params 中存在键值对,它只会在 conditions 哈希中创建键值对。

有没有办法把它写得更短一点?我在想 Hash#fetch :

conditions[:foo] = params.fetch(:foo, nil)

但这不是我想要的,因为如果 params 中没有这样的键,那么我将得到一个具有 nil 值的对。

如果 params 中存在这样的键值,我只需要创建 conditions 键值。

我问这个问题是因为我有几行类似的分配行,其中 params[:foo] 在每一行重复两次:

  conditions[:foo] = params[:foo] if params[:foo].present?
conditions[:bar] = params[:bar] if params[:bar].present?
conditions[:baz] = params[:baz] if params[:baz].present?
conditions[:zxc] = params[:zxc] if params[:zxc].present?
# ...

最佳答案

首先,在您的原始代码中我会使用 params.key? (除非你真的不关心值为 false、空数组等的情况)。我可能会坚持这一点,因为它非常清楚而且不那么冗长。

我能想到的一个替代方案:

conditions.merge!(params.slice(:foo))

这需要积极的支持,并且即使您使用许多哈希键执行此操作也会保持简洁 - 您只需将它们添加到对 slice 的调用中。

slice使用 has_key?只返回散列的所需部分,因此处理像 false 这样的值和 []按照我的建议,而不是按照您的问题实现它们。

关于ruby-on-rails - 仅当旧哈希中存在时才在新哈希中创建键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34806736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com