我每天有三个时段,还有一些候选帖子可供发布。我正在制作一个小工具,让我们可以在接下来的几个星期内将候选人安排到插槽中,看看时间表会是什么样子。我们经常需要重新排列,将一个候选人从当前时间段拖到另一个候选人。
我有一个名为PublishTime
的模型,它将candidate_id
和datetime
配对。我知道我可以设置模型来验证candidate_id
和datetime
的唯一性,这可以通过阻止创建具有现有candidate_id
的新记录来保持唯一性现有datetime
。
我想要做的是通过删除任何包含我正在创建的新记录的candidate_id
或datetime
的现有记录来保留唯一性。我希望新记录覆盖任何现有记录。有内置的方法吗?
答案 0 :(得分:1)
我相信你可以使用find_or_initialize_by
upsert
操作。如果记录是新的,则插入它。如果已根据您的要求存在,则更新它。
例如:
scope = params.slice(:candidate_id, :datetime)
publish_time = PublishTime.find_or_initialize_by(scope) do |new_publish_time|
# optional block if you need to do something with a new model
# do something with `new_publish_time`
end
publish_time.assign_attributes(params)
publish_time.save!