我有一個包含大約 10 個值的表,用于填充應用程式中的某些視圖。表是靜態的,因為應用程式中不存在添加/修改資料的操作。我的任務是在此表中添加一行,并正在探索如何做到這一點。(沒有直接對表的寫訪問權限,因此無法在 sql server 上運行查詢)。
我正在考慮創建遷移并使用 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 列)。但是,我遇到了這個 stackoverflow 帖子:如何在 rails 遷移中添加一些插入?需要強調的是,使用模型進行資料修改是一種不好的做法,因為模型可能會隨著時間的推移而改變,而是使用原始 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 不支持檢查執行呼叫中發生的情況,因此在這里無法為您提供幫助。在繼續之前,請確保您正在做的事情是安全的,然后將其包裝在 safe_assured { ... } 塊中。
當我直接在測驗資料庫中運行 sql 時,查詢有效。created_at 和 updated_at 列顯示為空。(不確定如何添加特定于 Rails 的時間戳)
insert into table_name (type_id, name, program) values ('a123', 'Test Value', 'Test Program');
Total rails noob here 并希望就我可能做錯的事情或正確的做法提出建議。
使用 Rails 6 和 Ruby 2.7。如果需要任何其他詳細資訊,請告訴我。謝謝。
PS:我在我們的代碼庫中沒有看到 seed.rb 檔案,所以不知道該怎么做。
uj5u.com熱心網友回復:
僅使用遷移來插入/更新某些表并不是一個好主意
遷移用于更改資料庫架構
用你的 rake 任務可能會更好
ModelName.create(type_id: "a123", name: "Test Value", program: "Test Program")
或者只是使用控制臺
如果是app需要的一些基礎資料的一部分,最好用seed
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484587.html
標籤:mysql 轨道上的红宝石 红宝石 ruby-on-rails-6
上一篇:使用兩個現有列計算第三列的值
