我想按条件检索一条记录,如果它在数据库里不存在就直接创建一条要检索的这个记录 .. 可以使用 find_or_create_by .. 先查看一下 Tag 模型里的所有的记录
Tag.all
目前它里面什么也没有 ... 使用一下 Tag 模型的 find_or_create_by .. title 等于 rails ... 在 tags 表里检索 title 的值是 rails 的记录 ... 如果不存在,就会直接创建一条这样的记录 ..
Tag.find_or_create_by(title: 'rails')
你会看到,这个方法会先检索这条记录 ... 因为没找到,所以又执行了一个 INSERT INTO,把这条记录插入到了 tags 表里 ...
再执行一下这行代码 ... 这里只会有检索,没有执行插入的动作,因为 Tag 模型在数据库里找到了这条记录 ..
find_or_initialize_by
如果检索的记录不存在,你只想初始化一下这个模型,暂时不想把它保存到数据库里,可以使用 find_or_initialize_by ... 用一下 Tag 模型的这个方法 ... title 的值是 ruby ...
tag = Tag.find_or_initialize_by(title: 'ruby')
查看一上这个模型有没有保存 ...
tag.persisted?
返回的结果是 false .. 再问一下它是不是一个新的记录 ..
tag.new_record?
结果是 true ... 想把它永久的保存到数据库里,可以使用一下 save 方法 ..
tag.save
再检索一下 ..
Tag.all
这里会出现刚才我们手工保存的 ruby 这个标签 ...