Rails find_or_create_by有/无在哪里
假设我有一个名为Task
的模型。 我想通过某项任务找到_或_创建。
t = Task.where(done: false).find_or_create_by(title: 'epic')
此模型有效,但创建一个title
等于epic且done
等于false的任务。 我希望查询搜索done
等于false,但我不希望新记录done
等于false。 我该怎么做?
您可以使用名为: find_or_initialize_by
。 它只初始化记录,但不创建它。 这样,您可以稍后覆盖以下属性:
task = Task.where(done: false).find_or_initialize_by(title: 'epic').first task.done = true # or nil or whatever you want! task.save
我只用task.done = true
保存了第一条记录。 如果有多个记录,您可以使用each
记录遍历所有记录,并将它们全部保存。
编辑:
Task.where(:done => false).first_or_initialize do |task| task.done = true task.title = 'epic' end