Possiedo un modello utente appartenente a un gruppo. Il gruppo deve avere un attributo nome univoco. Fabbrica utente e fabbrica di gruppo definite come:Trova o crea record tramite l'associazione factory_girl
Factory.define :user do |f|
f.association :group, :factory => :group
# ...
end
Factory.define :group do |f|
f.name "default"
end
Quando viene creato il primo utente, viene creato anche un nuovo gruppo. Quando provo a creare un secondo utente, fallisce perché vuole creare di nuovo lo stesso gruppo.
C'è un modo per dire al metodo di associazione factory_girl di cercare prima un record esistente?
Nota: ho provato a definire un metodo per gestirlo, ma non posso utilizzare f.association. Mi piacerebbe essere in grado di utilizzarlo in scenari di cetriolo in questo modo:
Given the following user exists:
| Email | Group |
| [email protected] | Name: mygroup |
e questo può funzionare solo se l'associazione è utilizzato nella definizione di fabbrica.
Funziona molto bene, grazie. In Rails 4, il modo preferito sarebbe: 'Group.find_or_create_by (name: name)' – migu
Il modo preferito in Rails 4 sarebbe in realtà 'Group.where (nome: nome) .first_or_create'. – Laurens
Probabilmente questa dovrebbe essere la risposta accettata. Drive-by-ers ... ecco la tua soluzione. – ocodo