2012-08-16 30 views

Trả lời

6

Nếu bạn nhìn vào các nguồn trong 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 

bạn có thể thấy find_or_create_by chấp nhận một {} như là đối số đầu tiên. Bạn chỉ có thể chuyển một số điều kiện cùng một lúc

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

và nó sẽ hoạt động.

+0

Cảm ơn bạn rất nhiều! – hyperrjas

+0

Làm cách nào để tìm thấy thuộc tính đầu tiên, và sau đó - chỉ trong trường hợp không tìm thấy gì - hãy tạo các thuộc tính khác? – ChristofferJoergensen

+1

@ChristofferJoergensen, Client.create_with (bị khóa: sai) .find_or_create_by (first_name: 'Andy'), hãy xem các tài liệu: http://guides.rubyonrails.org/active_record_querying.html – mkralla11

1

Từ các tài liệu mongoid trên querying:

Model.find_or_create_by

Tìm một tài liệu bằng các thuộc tính cung cấp, và nếu không tìm thấy tạo và trả về một mới vẫn kiên trì một.

0

Christoffer,

Tôi chạy vào một vấn đề tương tự chỉ thời gian gần đây và cuối cùng figured it out sau khi đọc nguồn trong kho git mongoid:

Trong mongoid 3.1.0 nhánh ổn định, công trình này

@new_object = NewObject.find_or_create_by(indexed_attribute: my_unique_value, 
                 :attributeA => value, 
                 :attributeB => value) 
Các vấn đề liên quan