无法通过迁移在现有 table 中插入行 - Rails 6
Unable to Insert row in an existing table via migrations - Rails 6
我有一个 table,其中包含大约 10 个值,用于填充应用程序中的某些视图。 Table 是静态的,因为应用程序中没有任何操作存在于其中的 add/modify 数据。我的任务是向 table 添加一行,并正在探索如何做到这一点。 (没有直接对 table 的写入权限,因此不能 运行 在 sql 服务器上查询)。
我正在考虑创建迁移并使用 Model.create 或 Model.new 命令创建行。类似于:
class AddNewRowToTestTable < ActiveRecord::Migration[6.1]
def change
Model_Name.create({:type_id => "a123", :name => "Test Value", :program => "Test Program"})
end
end
上面的方法可行,它添加了正确的时间戳(对于 created_at 和 updated_at 列)。但是,我遇到了这个 Whosebug post: How do I add some inserts in rails migration? ,其中强调使用模型进行数据修改是一种不好的做法,因为模型可能会随着时间的推移而改变,而是使用原始 sql 。所以我尝试这样做:(必须添加时间戳代码,否则会创建空值)
class AddNewRowToTestTable < ActiveRecord::Migration[6.1]
def change
execute "insert into table_name (type_id, name, program, created_at, updated_at) values ('a123', 'Test Value', 'Test Program', '#{Time.now}', '#{Time.now}')"
end
end
但是,运行迁移时出现以下错误:
Strong Migrations 不支持检查内部发生的情况
执行呼叫,所以不能在这里帮助你。请确定什么
在继续之前你所做的是安全的,然后将其包装在 safety_assured { ... } 块中。
当我直接在测试数据库中 运行 sql 时,查询有效。 created_at 和 updated_at 列显示为空。 (不确定如何添加 rails 特定时间戳)
insert into table_name (type_id, name, program) values ('a123', 'Test Value', 'Test Program');
这里共有 rails 菜鸟,希望就我可能做错的地方或正确的做法提出建议。
使用Rails6和Ruby2.7。如果需要任何其他详细信息,请告诉我。谢谢。
P.S:我在我们的代码库中没有看到 seeds.rb 文件,所以不确定该怎么做。
仅使用迁移来插入/更新一些表并不是一个好主意
迁移用于更改数据库架构
也许用你的
编写 rake 任务会更好
ModelName.create(type_id: "a123", name: "Test Value", program: "Test Program")
或仅使用控制台
如果是app需要的一些基础数据,最好用seed
我有一个 table,其中包含大约 10 个值,用于填充应用程序中的某些视图。 Table 是静态的,因为应用程序中没有任何操作存在于其中的 add/modify 数据。我的任务是向 table 添加一行,并正在探索如何做到这一点。 (没有直接对 table 的写入权限,因此不能 运行 在 sql 服务器上查询)。
我正在考虑创建迁移并使用 Model.create 或 Model.new 命令创建行。类似于:
class AddNewRowToTestTable < ActiveRecord::Migration[6.1]
def change
Model_Name.create({:type_id => "a123", :name => "Test Value", :program => "Test Program"})
end
end
上面的方法可行,它添加了正确的时间戳(对于 created_at 和 updated_at 列)。但是,我遇到了这个 Whosebug post: How do I add some inserts in rails migration? ,其中强调使用模型进行数据修改是一种不好的做法,因为模型可能会随着时间的推移而改变,而是使用原始 sql 。所以我尝试这样做:(必须添加时间戳代码,否则会创建空值)
class AddNewRowToTestTable < ActiveRecord::Migration[6.1]
def change
execute "insert into table_name (type_id, name, program, created_at, updated_at) values ('a123', 'Test Value', 'Test Program', '#{Time.now}', '#{Time.now}')"
end
end
但是,运行迁移时出现以下错误:
Strong Migrations 不支持检查内部发生的情况 执行呼叫,所以不能在这里帮助你。请确定什么 在继续之前你所做的是安全的,然后将其包装在 safety_assured { ... } 块中。
当我直接在测试数据库中 运行 sql 时,查询有效。 created_at 和 updated_at 列显示为空。 (不确定如何添加 rails 特定时间戳)
insert into table_name (type_id, name, program) values ('a123', 'Test Value', 'Test Program');
这里共有 rails 菜鸟,希望就我可能做错的地方或正确的做法提出建议。
使用Rails6和Ruby2.7。如果需要任何其他详细信息,请告诉我。谢谢。
P.S:我在我们的代码库中没有看到 seeds.rb 文件,所以不确定该怎么做。
仅使用迁移来插入/更新一些表并不是一个好主意
迁移用于更改数据库架构
也许用你的
编写 rake 任务会更好ModelName.create(type_id: "a123", name: "Test Value", program: "Test Program")
或仅使用控制台
如果是app需要的一些基础数据,最好用seed