比方說,我有一個名爲Task
的模型。我想find_or_create_by
一些任務。Rails find_or_create_by with/without where
t = Task.where(done: false).find_or_create_by(title: 'epic')
這個模型的工作,但創建任務與title
等於史詩done
等於假。我想通過done
查詢搜索等於false,但我不希望新記錄done
等於false。我該怎麼做?
比方說,我有一個名爲Task
的模型。我想find_or_create_by
一些任務。Rails find_or_create_by with/without where
t = Task.where(done: false).find_or_create_by(title: 'epic')
這個模型的工作,但創建任務與title
等於史詩done
等於假。我想通過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
http://stackoverflow.com/a/21190577/2697183。你可以重寫'done'的值,如果一個新的實例被創建 – AbM
感謝您的鏈接,但它們使用'first_or_create'已過時我認爲 – asiniy