在 Ruby 中找到第一个可能匹配的哈希键的优雅方式

Elegant way in Ruby to find first of possible matching hash keys

假设我的用户输入可以是这样的:

input = { user_id: 5, ... }

或者这个:

input = { app_id: 5, ... }

我想 return :user_id 或 :app_id 取决于所提供的。我可以这样做:

(input.keys & [:user_id, :app_id]).first

是否有更优雅、更像 ruby​​ish 的惯用方法?

这比上面更好还是更差?:

input.slice(:user_id, :app_id).keys.first

(答案不需要严格来自 Ruby 2.2 标准库,也欢迎 Rails 方法)

我会用 find and has_key?:

反过来解决
[:user_id, :app_id].find { |k| input.has_key?(k) }

您的解决方案已经足够好了。我更喜欢的替代方案:

input = { app_id: 5, ... }

KEYS = [:app_id, :user_id, :foo_id]

input.find { |key, value| KEYS.include? key }

通过这种方式,您可以将想要的 what 与想要的 how 分开。您甚至可以从文件中分配 KEYS,这样您甚至不必打开代码即可在查找中添加或删除键。但这可能是过度设计。

我会为 KEYS tough 找一个更好的名字。取名好难

为什么不只是:

input.key?(:user_id) ? :user_id : :app_id

?我错过了什么吗?