为 rails 中的列创建动态默认值?

create dynamic default values for column in rails?

我不确定该怎么做,或者是否有更好的方法,但我有一个名为 leads(many) 的 table,它引用了 agent (one)。

我想进行迁移,为潜在客户 table 中的 agent_id 列设置默认值。但我希望默认值遍历所有代理 ID。我不知道该怎么做!?我应该使用回调,还是应该在迁移文件中使用?

这是我要解决的实际问题:

当创建新的潜在客户时,使用“循环”将其分配给代理,这样新的潜在客户就会平均分配给所有代理。

我附上了一张使用 SUDO 代码(我知道它不能按原样运行)的屏幕截图,说明我想做什么。有什么建议吗?

(在 rails 上使用 ruby w/postgresql)

我认为将此功能作为主应用程序的一部分而不是在迁移中处理是有意义的,因为似乎有大量功能需要处理。

可能最好将其作为 Lead 模型中 after_create 回调的一部分进行处理,并使用 class 变量跟踪下一个要分配的代理,如下所示:

class Lead
  # Assign the class variable to the first agent
  @@next_agent = Agent.first
  after_create :set_agent

  ...

  private

  # Called by the after_create callback
  # Sets the agent_id, and updates the @@next_agent class variable
  def set_agent
    self.agent_id = @@next_agent.id
    @@next_agent = find_next_agent
  end

  ## Called from the set_agent method
  ## Finds the next agent based on the current value of @@next_agent
  def find_next_agent
    @@next_agent = Agent.find(@@next_agent.id + 1)
    @@next_agent = Agent.first unless @next_agent
  end
end

上面的find_next_agent逻辑是一个简单的例子,假设所有Agent对象的id都递增1,并且没有间隙(即table中没有删除)。