Rails 3迁移:(非主键)列上的自动增量?

时间:2011-08-19 18:50:22

标签: ruby-on-rails ruby-on-rails-3

我正在寻找一种方法来创建一个自动增加automatic:id列的方式的列。我可能会在模型中以某种方式处理这个问题,但这似乎很笨拙。我还没有找到任何有效的Rails 3;有没有宝石可以处理这个?我很惊讶它不是一个选项,因为Rails处理主键列的这种行为。

2 个答案:

答案 0 :(得分:1)

通常使用数据库序列实现自动递增列。使用序列而不是计算下一个增量的优点是从序列中获取下一个值是原子的。因此,如果您有多个流程创建新元素,则序列将确保您的数字非常独特。

序列可用于postgresql,oracle,mysql,......

如果您正在使用postgres,如何实现此目的:

  • 从序列中选择下一个值:

    Integer(Operator.connection.select_value("SELECT nextval('#{sequence_name}')"))

  • 创建一个序列:

    Operator.connection.execute("CREATE sequence #{sequence_name}")

  • 设置序列的起始值:

    Operator.connection.execute("SELECT setval('#{sequence_name}', #{new_start_serial})")
    

希望这有帮助。

答案 1 :(得分:0)

如果您真的认为需要这个,可以在模型中创建一个before_create过滤器来检查最后一个记录属性值并向其添加1。感觉很乱。