当我从表中删除所有并开始再次插入时,我遇到主键如何递增的问题。这是有问题的,因为我还有与已清除表关联的其他模型。例如,如果我有属于 Computer 的 Apple,那么当我清除 Computer 表并重新添加计算机时,关联会变得混乱,因为 Apple 现在在其行中包含婴儿 computer_id。我希望能够重置计算机的主键,以便当我重新添加计算机时,关联仍然保持不变。我应该如何在 Rails 中做到这一点?
Edit我很抱歉不清楚这一点,但现在我会告诉你我想做的事。我希望用户与机器(计算机)关联。一台计算机有自己的ID,只能由管理员创建。电脑桌上有固定数量的电脑。
User
belongs_to :computer
Computer
has_many :users
我面临的问题是,我在 seeds.rb/some rakefile 中预加载了计算机表。当我启动应用程序时,我只想运行首先删除所有内容然后预加载表的文件。这将允许用户仅从计算机表中提供的计算机中选择一台计算机。我希望能够再次运行这个脚本(比如在heroku控制台中,而不删除用户表),并且仍然获得与每台机器(以及每个用户)关联的相同ID。我很困惑我应该如何做到这一点。请让我知道我是否应该采取不同的做法。
首先,你不应该这样做!如果您想更改记录,只需更新表中的行即可。不要删除它并重新插入它!如果您仍然想这样做,那么您应该删除其他表中的所有关联行并插入计算机和苹果。
我不知道 Rails 重置自动增量主键的方法,但如果你使用 mysql 那么你可以运行自定义查询:
ActiveRecord::Base.connection.execute('ALTER TABLE tablename AUTO_INCREMENT = 1')
它应该将自动增量值重置为下一个可用数字。
EDIT:
如何加载数据id
。
我不确定加载种子是否可以做到这一点,但可以肯定的是使用固定装置会有所帮助。你需要做的是准备computers.yml
包含数据的文件:
First_computer:
id: 1
name: computer
Second_computer:
id: 2
name: dell
etc.
然后你可以使用它将它加载到数据库:
require 'active_record/fixtures'
Fixtures.create_fixtures("/path/to/directory/where/your/yml/file/is/", "computers")
但它会重置整个表(所有行都将被删除并重新插入 - 但您可以保留您的 ID)。
我想再次警告您,以这种方式加载数据是个坏主意。夹具/种子应仅用于为数据库提供初始(启动应用程序所需)数据。
为什么要重置这个表?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)