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个标题)相同,只返回第一个