我有一个大约有10个值的表,用于填充应用程序中的一些视图.表是静态的,因为应用程序中不存在添加/修改其中数据的操作.我的任务是在这个表中添加一行,并在探索如何做到这一点.(没有直接对表的写访问权限,因此无法在sql server上运行查询).
我在考虑创建一个迁移和使用模型.创建或建模.新建命令以创建行.类似于:
class AddNewRowToTestTable < ActiveRecord::Migration[6.1]
def change
Model_Name.create({:type_id => "a123", :name => "Test Value", :program => "Test Program"})
end
end
上述方法可以工作,并添加了正确的时间戳(对于created\u at和updated\u at列).然而,我遇到了这篇stackoverflow帖子:How do I add some inserts in rails migration?,其中强调使用模型修改数据是一种不好的做法,因为模型可能会随着时间的推移而改变,而使用原始sql.所以我try 这样做:(必须添加时间戳代码,否则会创建空值)
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 does not support inspecting what happens inside an execute call, so cannot help you here. Please make really sure that what you're doing is safe before proceeding, then wrap it in a safety_assured { ... } block.
当我在测试数据库中直接运行sql时,查询就会工作.created\u at和updated\u at列显示为空.(不确定如何添加rails特定的时间戳)
insert into table_name (type_id, name, program) values ('a123', 'Test Value', 'Test Program');
道达尔·rails(Total rails)在这里不做任何事情,如果您能告诉我哪些地方做错了,哪些是正确的方法,我将不胜感激.
使用Rails 6和Ruby 2.7.如果需要任何其他详细信息,请务必告诉我.谢谢
P、 S:我没有看到种子.rb文件,所以不确定如何处理.