如果活动记录对象具有属性并且是唯一的

我想在Rails模型中添加一个回调,以检查属性是否存在,然后检查其是否唯一。

该属性是一个令牌,可以在多个活动记录对象之间共享(对于单个对象),也可以为零。

对于这些令牌中的每一个,我只想执行一次操作,而不对具有令牌的每个活动记录对象执行一次。

例如:

我使用令牌创建新记录:

thing.create(token = "abc")

这将是第一次使用令牌“ abc”创建对象。所以我会采取行动(在这种情况下,开始一个sidekiq工作者)

接下来,我添加第二条具有相同令牌的记录:

thing.create(token = "abc")

这是第二次使用此令牌,因此我不采取任何行动。

shashenglin 回答:如果活动记录对象具有属性并且是唯一的

您可以使用after_commit

after_commit :do_foo,on: :create

private

def do_foo
  return if Model.exists?(token: token)

  do_what_you_have_to_do
end

该方法检查是否已存在具有相同标记的记录,如果是,则从方法本身返回。否则,您可以继续做您需要的事情。

本文链接:https://www.f2er.com/3121654.html

大家都在问