Rails DB:种子如何绕过验证
错误消息:
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Status : Event is Locked
我在种子中存储了一堆测试数据。
预测结构
{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"},
...
I对预测模型有验证,该模型在允许进行预测之前检查所讨论的事件_id的状态是“即将到来的”。因此,当我运行DB:种子时,它会失败验证,因为某些事件不是“即将到来的”。
事件结构
{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
Event.RB
...
def concluded?
self.status == "Concluded"
end
def in_progress?
self.status == "In Progress"
end
对于我想与其他人共享该应用以测试功能的情况,如果我可以绕过验证验证以进行播种目的,则可以节省很多时间。
我正在按以下顺序进行播种数据 用户 - &gt;活动 - &GT;预言
Error Message:
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Status : Event is Locked
I stored a bunch of test data in seeds.rb that I am having trouble seeding w/ db:seed.
Prediction structure
{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"},
...
I have a validation for the Prediction model that checks for the status of the event_id in question to be "Upcoming", before allowing the prediction to be made. So when I run db:seed, it fails the validation because some of the events are not "Upcoming".
Event structure
{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"},
Prediction.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
Event.rb
...
def concluded?
self.status == "Concluded"
end
def in_progress?
self.status == "In Progress"
end
For my scenario of wanting to share the app with others to test functionality, it would save a lot of time if I could bypass validations for seeding purposes.
I am seeding data in order of:
User --> Event --> Prediction
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用方法
最好创建第一个特定的事件和用户。然后致电
user_id:my_super_user.id,event_id:my_super_event.id
等。You can use
insert_all
methodMay be it's better to create first specific events and users. And then call
user_id: my_super_user.id, event_id: my_super_event.id
etc.