我正在寻找一种方法来创建自动增加自动:id列的方式的列。我可以在模型中以某种方式处理这个问题,但这似乎是kludgey。我还没有找到任何处理这个问题的股票Rails 3;有没有可以处理这个问题的宝石?我很惊讶这不是一个选项,因为Rails处理主键列的这种行为。Rails 3迁移:(非主键)列上的自动增量?
3
A
回答
0
如果你真的认为你需要这个,你可以在模型中创建一个before_create过滤器来检查最后一个记录属性值,并向其中添加1。感觉虽然黑客攻击。
+0
我同意 - 它似乎hackish。至于为什么我需要这样的事情:自动增量不仅仅适用于数据库领域的主键。在这种情况下,我添加了一系列步骤,并且不太需要明确地编号,Rails可以为我做这些。我可能需要写这个宝石。 – sabat
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. 使用phinx迁移库的非主键列的自动增量
- 2. JPA自动增量非主键列
- 3. 如何管理Rails中的非自动增量主键?
- 4. Rails 3 ActiveRecord save()方法和自动增量主键字段
- 5. 分贝:自动:在迁移的Rails 3
- 6. 的SQLite自动增加非主键
- 7. 使用rails迁移创建丢失的自动增量属性
- 8. Laravel 4:如何使用迁移创建非主自动递增列?
- 9. 键列自动增量
- 10. 在Ruby on Rails中自动增加非主键字段
- 11. 的Rails 3:迁移HABTM,主键的问题
- 12. 使用Fluent NHibernate的非主键身份自动增量映射
- 13. 对于Oracle中的非主键列自动递增
- 14. 非主键列的自动递增数字生成
- 15. 导轨迁移除去键和添加数据到自动增量列ID
- 16. SQL插入多个条目非自动增量主键
- 17. Hibernate/JPA SQLServer主键自动增量
- 18. 如何创建自动增量主键?
- 19. 两个主键&自动增量
- 20. SQLite:双主键和自动增量
- 21. 整数主键不自动增量
- 22. 更改主键和自动增量
- 23. 如何重置ActiveRecord迁移中的自动增量字段?
- 24. 复合主键和自动增量列,但不是主要的关键
- 25. 如何根据列的顺序添加自动增量主键?
- 26. 如何指定主键列的自动增量值?
- 27. 创建一个不是主键的自动增量列
- 28. SQL Server中自动增量主键的上限
- 29. 按列自动排序(非主键)
- 30. Rails 3迁移:添加引用列?
主键列自动增量是因为数据库本身,MySQL或您使用的任何DBMS都会使用每条新记录递增主键。为什么你需要另一个增量列? – Alex
那么,如果您不打算更改数据库,则可以在迁移中始终使用“执行”以在原始SQL中添加另一个序列/自动递增字段。但是,如果你最终会得到两列都是自动递增的列,那它们是不是真的是同一列?我意识到一个纯粹主义者会在这一点上击败我,但是... – jaydel