2012-08-16 8 views

Antwort

6

Wenn Sie an der Quelle suchen in 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 

Sie, dass find_or_create_by sehen eine {} als erstes Argument akzeptiert. Sie können einfach mehrere Bedingungen auf einmal

something.find_or_create_by(name: 'john', age: 20) 

übergeben und es sollte funktionieren.

+0

Vielen Dank! – hyperrjas

+0

Wie finde ich nur nach dem ersten Attribut, und dann - nur für den Fall, dass nichts gefunden wird - mit den anderen Attributen erstellen? – ChristofferJoergensen

+1

@ChristofferJoergensen, Client.create_with (locked: false) .find_or_create_by (Vorname: 'Andy'), werfen Sie einen Blick auf die Dokumentation: http://guides.rubyonrails.org/active_record_querying.html – mkralla11

1

Von den mongoid docs auf querying:

Model.find_or_create_by

durch die dafür vorgesehenen Attribute ein Dokument finden, und wenn nicht und zurück blieb eine neu gefundene erstellen.

0

Christ,

ich in ein ähnliches Problem lief erst vor kurzem und es schließlich herausgefunden, nachdem die Quelle im mongoid Git Repository zu lesen:

In mongoid 3.1.0 Stable-Zweig, das funktioniert

@new_object = NewObject.find_or_create_by(indexed_attribute: my_unique_value, 
                 :attributeA => value, 
                 :attributeB => value) 
Verwandte Themen