Rails的“验证唯一性”可以覆盖现有记录吗?

时间:2018-04-01 01:39:47

标签: ruby-on-rails

我每天有三个时段,还有一些候选帖子可供发布。我正在制作一个小工具,让我们可以在接下来的几个星期内将候选人安排到插槽中,看看时间表会是什么样子。我们经常需要重新排列,将一个候选人从当前时间段拖到另一个候选人。

我有一个名为PublishTime的模型,它将candidate_iddatetime配对。我知道我可以设置模型来验证candidate_iddatetime的唯一性,这可以通过阻止创建具有现有candidate_id的新记录来保持唯一性现有datetime

我想要做的是通过删除任何包含我正在创建的新记录的candidate_iddatetime的现有记录来保留唯一性。我希望新记录覆盖任何现有记录。有内置的方法吗?

1 个答案:

答案 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!