我想知道是否有可能运行Model.create()
,而不是采用下一个空闲id
整数,它取最低的自由整数。
例如,假设我们有id=10..20
的记录,而我们没有id=0..9
的记录,我希望从0开始创建带id
的模型实例(正常情况下) Mode.create()in会创建从21开始的实例
最好我想以自动方式进行。我不想通过明确定义来更改id
。
答案 0 :(得分:0)
<强> DB 强>
你最好在数据库级别这样做(看看改变auto-increment
号码)
虽然我认为你可以在Rails中做到这一点,但我强烈建议使用数据库功能来实现它。您可以在PHPMYAdmin(对于MYSQL)中执行类似的操作:
如果将自动增量设置为您希望开始的数字,则每次将数据保存到数据库中时,它都将保存该数字。我认为使用任何基于Rails的方法都会使事情过于复杂化。
答案 1 :(得分:-1)
我不鼓励它。
那些id
仅作为表中行的唯一标识符,而分配一个是数据库的工作。您可以验证模型不需要保存id
:
m = Model.new
# populate m with data
m.name = "Name"
# look at what m contains
m
# and save it
m.save
# now inspect it again and see it got its unique id
m
虽然可以修改id
,但在每个新记录获得唯一 {{时,对id
提供更多意义并不是一个好习惯。 1}} 随时更容易调试开发期间可能发生的可能的DB结构错误。比方说,一些相关对象突然出现在新用户的帐户中。很奇怪吧?这种情况可能发生,最坏的情况是,可能会出现在生产中导致严重的安全漏洞。
始终保持id
的独特性可消除此错误的影响。如果关联对象存储机密信息并且您关心如何保护它们,那么这似乎更为重要。加密问题放在一边。
因此,为了确保在任何情况下,开发人员采用的做法是不给id
任何其他角色,除了唯一标识表中的行。如果您希望它做其他事情,请考虑为此目的创建另一个字段。