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