答案 0 :(得分:6)
如果查看lib / mongoid / finders.rb中的源代码:
# Find the first +Document+ given the conditions, or creates a
# with the conditions that were supplied.
...
# @param [ Hash ] attrs The attributes to check.
#
# @return [ Document ] A matching or newly created document.
def find_or_create_by(attrs = {}, &block)
find_or(:create, attrs, &block)
end
你可以看到find_or_create_by接受{}
作为第一个参数。您可以一次传递几个条件
something.find_or_create_by(name: 'john', age: 20)
它应该有用。
答案 1 :(得分:1)
来自querying上的mongoid文档:
Model.find_or_create_by
按提供的属性查找文档,如果找不到则创建 并返回一个新持久的。
答案 2 :(得分:0)
克里斯托弗,
我最近遇到了一个类似的问题,最终在阅读了mongoid git存储库中的源代码后发现了它:
在mongoid 3.1.0稳定分支中,这可行
@new_object = NewObject.find_or_create_by(indexed_attribute: my_unique_value,
:attributeA => value,
:attributeB => value)