Rails model.create set id

时间:2014-07-20 08:35:56

标签: ruby-on-rails activerecord

我想知道是否有可能运行Model.create(),而不是采用下一个空闲id整数,它取最低的自由整数。

例如,假设我们有id=10..20的记录,而我们没有id=0..9的记录,我希望从0开始创建带id的模型实例(正常情况下) Mode.create()in会创建从21开始的实例

最好我想以自动方式进行。我不想通过明确定义来更改id

2 个答案:

答案 0 :(得分:0)

<强> DB

你最好在数据库级别这样做(看看改变auto-increment号码)

虽然我认为你可以在Rails中做到这一点,但我强烈建议使用数据库功能来实现它。您可以在PHPMYAdmin(对于MYSQL)中执行类似的操作:

enter image description here

如果将自动增量设置为您希望开始的数字,则每次将数据保存到数据库中时,它都将保存该数字。我认为使用任何基于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任何其他角色,除了唯一标识表中的行。如果您希望它做其他事情,请考虑为此目的创建另一个字段。

相关问题