如何通过键和插入值查找或创建

时间:2014-03-01 15:59:49

标签: ruby-on-rails ruby-on-rails-4

在Rails 3中,如果它仍然不存在则可以添加新记录并填充另一个类似的内容:

Model.find_or_create_by_title('my title', attr1: 1, attr2: 2)

所以这将按标题查看模型

select * from models where title = 'my title'

如果它不存在,那么它将使用attr1和attr2

创建它

这种方法将被弃用,因为它覆盖了missing_method,而新的方法将使用hash作为键:

Model.find_or_create_by(title: 'my title', attr1: 1, attr2: 2)

但是,attr1:1,attr2:2的问题也将被搜索,sql将会是这样的:

select * from models where title = 'my title' and attr1 = 1 and attr2 = 2

现在的问题是:我如何按键搜索模型,如果它不存在则创建它并填充在一个插入中,因为所有HACKS如find,create然后更新都不适用于'Rails Way'

谢谢大家

2 个答案:

答案 0 :(得分:1)

不确定,我理解你的问题,但这里是答案

 Model.find_or_create_by(title: 'my title') do |a|
  a.attr1 = 1
  a.attr2 = 2
 end

您可以在官方的导轨指南中找到更多信息:http://guides.rubyonrails.org/active_record_querying.html#find-or-create-by

答案 1 :(得分:1)

试试这个:

Model.where(title: 'my title').first_or_create(attr1: 1, attr2: 2)