Ruby on rails Rails-通过查找或创建for和数组?

Ruby on rails Rails-通过查找或创建for和数组?,ruby-on-rails,postgresql,ruby-on-rails-4,Ruby On Rails,Postgresql,Ruby On Rails 4,我正在尝试做一个XXX.find\u或\u create\u by(标题:“test”) 但是有一系列的标题 现在,如果我这样做了 XXX.where(title: ["title1", "title2"]).first_or_create 它将只检查第一个标题 带有第一个\u或\u创建的逻辑 但我想为任何头衔做这件事。。 有什么想法吗 谢谢 试试这个会有用的 XXX.where("title IN ('title1','title2',''title3)").first_or_create

我正在尝试做一个
XXX.find\u或\u create\u by(标题:“test”)
但是有一系列的标题

现在,如果我这样做了

XXX.where(title: ["title1", "title2"]).first_or_create
它将只检查第一个标题

带有
第一个\u或\u创建的逻辑

但我想为任何头衔做这件事。。 有什么想法吗

谢谢

试试这个会有用的

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

我想你会想做一些事情,比如:

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])

XXX.create([{title:'title1'},{title:'title2'}])
这样你可以通过发送任何titles数组来创建我想保留逻辑以返回对象(如果对象已经存在)(这就是为什么我将
放在第一位\u或\u create
,而不仅仅是
create
)你对模型唯一性进行了验证吗?在模型上为Uniqueness添加一个验证是很好的另一种不好的方法,您可以这样做
[“title1”,“title2]”。map{t|XXX.where(title:t)。first_或_create}
目的是保持它与最小sql请求(有时会有10000个标题)相同,只返回第一个