在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'
谢谢大家
答案 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)