我有一个大约有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文件,所以不确定如何处理.

推荐答案

仅仅为了插入/更新一些表而使用迁移不是一个好主意

迁移用于更改数据库架构

也许用您的

ModelName.create(type_id: "a123", name: "Test Value", program: "Test Program")

或者只是使用控制台

如果它是应用程序需要的一些基本数据的一部分,那么最好使用种子

Mysql相关问答推荐

如何在产品查询中插入GROUP_CONCAT?

使用MySQL工作台导出具有数据的数据库表并导入到其字段具有不同数据类型的同一表中

LaravelEloquent ToSql()缺少连接表

如何确保 SQL 记录的列不引用它自己的主键?

从 MySQL WordPress Select 最后一行

有没有比使用 MySQL 计划事件更好的方法来更新我的数据库表中的列?

分别针对每个不同的列 Select 聚合

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

获取 TEXT 类型行的百分比

MySQL - 单词边界的正则表达式,不包括下划线(连接标点符号)

插入二进制数据会导致Data too long for column...

正则表达式模式相当于 mysql 中的 %word%

总行大小不超过 65535,但我得到行大小太大.所用表类型的最大行大小,不包括 BLOB,是 65535错误

mysql从另一个表中 Select 不相等的值

查询以查找可用时隙

MySQL Group By 和 Sum 其他列的总值

mysql 按日期 Select 总和组

在另一个 where 语句(子查询?)中使用一个 sql 查询的结果

Mysql中int(10)的最大大小是多少

第 1 行的 CSV 输入中的列数无效错误