錯誤資訊:
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Status : Event is Locked
我在seeds.rb 中存盤了一堆測驗資料,我無法使用db:seed 播種。
預測結構
{user_id: 2, event_id: 3, fighter_guess: "Jessica Andrade", method_guess: "Decision"},
{user_id: 2, event_id: 3, fighter_guess: "Claudio Puelles", method_guess: "Submission"},
{user_id: 2, event_id: 2, fighter_guess: "Vicente Luque", method_guess: "Decision"},
{user_id: 2, event_id: 2, fighter_guess: "Caio Borralho", method_guess: "TKO/KO"},
{user_id: 2, event_id: 1, fighter_guess: "Korean Zombie", method_guess: "TKO/KO"},
{user_id: 2, event_id: 1, fighter_guess: "Petr Yan", method_guess: "Decision"},
{user_id: 2, event_id: 4, fighter_guess: "Rob Font", method_guess: "Submission"},
{user_id: 2, event_id: 5, fighter_guess: "Charles Oliveira", method_guess: "Decision"},
{user_id: 2, event_id: 5, fighter_guess: "Rose Namajunas", method_guess: "Submission"},
{user_id: 2, event_id: 6, fighter_guess: "Aleksandar Rakic", method_guess: "Decision"},
...
在允許進行預測之前,我對預測模型進行了驗證,該模型檢查有問題的 event_id 的狀態是否為“即將到來”。因此,當我運行 db:seed 時,它無法通過驗證,因為某些事件不是“即將到來”。
事件結構
{event_name: "UFC FN: LEMOS x ANDRADE", f1: "Amanda Lemos", f2: "Jessica Andrade", f3: "Clay Guida", f4: "Claudio Puelles", status: "Concluded", date: "Sat, Apr 23"},
{event_name: "UFC FN: FONT x VERA", f1: "Rob Font", f2: "Marlon Vera", f3: "Andrei Arlovski", f4: "Jake Collier", status: "Concluded", date: "Sat, Apr 30"},
{event_name: "UFC 274", f1: "Charles Oliveira", f2: "Justin Gaethje", f3: "Rose Namajunas", f4: "Carla Esparza", status: "Upcoming", date: "Sat, May 7"},
預測.rb
class Prediction < ApplicationRecord
belongs_to :event
belongs_to :user
validate :prediction_no_longer_allowed
def prediction_no_longer_allowed
if self.event.concluded? || self.event.in_progress?
errors.add(:status, ": Event is Locked")
end
end
end
事件.rb
...
def concluded?
self.status == "Concluded"
end
def in_progress?
self.status == "In Progress"
end
對于我希望與其他人共享應用程式以測驗功能的場景,如果我可以繞過驗證以進行播種,它將節省大量時間。
我按以下順序播種資料:用戶->事件->預測
uj5u.com熱心網友回復:
你可以使用insert_all
方法
在單個 SQL INSERT 陳述句中將多條記錄插入資料庫。它不會實體化任何模型,也不會觸發 Active Record 回呼或驗證。盡管傳遞的值通過 Active Record 的型別轉換和序列化。
Prediction.insert_all([
{user_id: 2, event_id: 3, fighter_guess: "Jessica Andrade", method_guess: "Decision"},
{user_id: 2, event_id: 3, fighter_guess: "Claudio Puelles", method_guess: "Submission"},
{user_id: 2, event_id: 2, fighter_guess: "Vicente Luque", method_guess: "Decision"},
{user_id: 2, event_id: 2, fighter_guess: "Caio Borralho", method_guess: "TKO/KO"},
{user_id: 2, event_id: 1, fighter_guess: "Korean Zombie", method_guess: "TKO/KO"},
{user_id: 2, event_id: 1, fighter_guess: "Petr Yan", method_guess: "Decision"},
{user_id: 2, event_id: 4, fighter_guess: "Rob Font", method_guess: "Submission"},
{user_id: 2, event_id: 5, fighter_guess: "Charles Oliveira", method_guess: "Decision"},
{user_id: 2, event_id: 5, fighter_guess: "Rose Namajunas", method_guess: "Submission"},
{user_id: 2, event_id: 6, fighter_guess: "Aleksandar Rakic", method_guess: "Decision"},
])
創建第一個特定事件和用戶可能會更好。然后打電話user_id: my_super_user.id, event_id: my_super_event.id
等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470344.html
上一篇:僅顯示json回應中的某些鍵
下一篇:使用SQL查詢資料庫表