2016-04-01 6 views
2

Ich versuche, eine XXX.find_or_create_by(title: "test") aber mit einer Reihe von Titeln zu tun.Schienen - finden oder erstellen von - für und Array?

Nun, wenn ich

XXX.where(title: ["title1", "title2"]).first_or_create 

tun es nur für den ersten Titel mit einem first_or_create

Logik überprüfen Aber ich will es für jeden Titel tun .. eine Idee ?

Danke!

+0

'XXX.create ([{title: 'title1'}, {title: ' title2 '}]) 'so können Sie erstellen, indem Sie ein Array von beliebigen Titeln senden –

+0

Ich möchte die Logik beibehalten, um das Objekt zurückzugeben, wenn es bereits existiert (deshalb lege ich den' first_or_create' und nicht nur 'create') – F4Ke

+0

Haben Sie eine Validierung der Modelleindeutigkeit? Es ist gut, eine Validierung des Modells für die Eindeutigkeit hinzuzufügen –

Antwort

0

Versuchen Sie, diese

XXX.where("title IN ('title1','title2',''title3)").first_or_create 
+0

gleich, nur die erste zurückgeben – F4Ke

0

arbeiten ich denke, Sie werden Sie tun etwas wollen:

found_titles = XXX.where(title: [array_of_titles]).pluck(:title) 

to_be_created = [array_of_titles] - found_titles 

XXX.create(
    to_be_created.map{ |title| {title: title} } 
) 

return XXX.where(title: [array_of_titles]) 
Verwandte Themen