Сообщение об ошибке:
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Status : Event is Locked
Я сохранил кучу тестовых данных в seed.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"},
Прогноз.рб
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
Для моего сценария, когда я хочу поделиться приложением с другими для тестирования функциональности, я сэкономил бы много времени, если бы мог обойти проверки для целей заполнения.
Я высеваю данные в порядке: Пользователь --> Событие --> Прогноз
unknown attribute 'validate'
-- где вы использовали это validate
? Это проблема
Я отправил неправильное сообщение об ошибке, когда пытался найти решение. Исправил мб.
Итак, вам нужно создавать записи в БД с этими атрибутами и пропускать проверки?
Да, это цель.
Вы можете использовать метод insert_all
Inserts multiple records into the database in a single SQL INSERT statement. It does not instantiate any models nor does it trigger Active Record callbacks or validations. Though passed values go through Active Record's type casting and serialization.
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
и т.д.
Не рекомендуется жестко кодировать идентификаторы в БД.