查找与整个哈希匹配的项

Find item(s) that match an entire hash

我发现自己在 Rails 中多次遇到同样的情况。我有一个大致对应于模型的散列,我想查找是否存在与散列中所有 key/value 对匹配的模型实例。 Rails 有办法做到这一点吗?如果没有,我可以包括第 3 方 library/function 吗?

例如,我喜欢做这样的事情:

person_hash = { name: "John Doe", favorite_color: "chartreuse" }
p = Person.ultra_cool_find(person_hash)

puts p.name=="John Doe"             #true
puts p.favorite_color=="chartreuse" #true

尝试:

Person.find_by(person_hash)

Rails 文档:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by

Person 是 ActiveRecord 模型吗?

你试过了吗

p = Person.find_by(name: person_hash[:name])

如果您的 person_hash 有任何独特的字段,这将有效。例如,如果只有一个人的名字是 John Doe,那么上面的例子就可以了。

否则

p = Person.where(name: person_hash[:name]).where(favorite_color: person_hash[:favorite_color])

您可以通过

为每个要搜索的项目添加一个位置