Ruby on rails 未正确播种轨道
我试图使用模型方法为数据库种子,但它没有正确填充字段。首先,我的种子数据如下所示:Ruby on rails 未正确播种轨道,ruby-on-rails,Ruby On Rails,我试图使用模型方法为数据库种子,但它没有正确填充字段。首先,我的种子数据如下所示: 5.times do @battery = Battery.create end pan1 = Pan.create(battery_id: Battery.first.id, date: '2019-01-02', reading: 8.0, amount: nil, advisement: 700, acceptance: 87.5) 15.times do Pan.create(battery_
5.times do
@battery = Battery.create
end
pan1 = Pan.create(battery_id: Battery.first.id, date: '2019-01-02', reading: 8.0, amount: nil, advisement: 700, acceptance: 87.5)
15.times do
Pan.create(battery_id: Battery.first.id, date: pan1.date += 3.days, reading: Pan.reads, amount: Pan.ratings, advisement: Pan.advise, acceptance: Pan.accept, accepted: nil)
end
现在我在数据库中看到的第一个问题是panel1正在创建,然而,reading和acceptance都显示为nil,而不是我试图定义的预设值。我的错误在哪里?以下是模型中使用的所有方法:
class Pan < ApplicationRecord
belongs_to :battery
def self.reads
@pans = Pan.all
@pans.each do |pan|
if pan.reading == nil && pan.date >= 1.week.ago
pan.update_attributes!(reading: rand(5.0..18.0))
else
pan.update_attributes!(reading: nil)
end
end
end
def self.ratings
@pans = Pan.all
@pans.each do |pan|
pan.update_attributes!(amount: rand(200..20000))
end
end
def self.advise
@pans = Pan.all
@pans.each do |pan|
if pan.reading != nil && (pan.reading < 9.0 || pan.reading > 14.0)
pan.update_attributes!(advisement: rand(200..20000))
end
end
end
def self.accept
@pans = Pan.all
@pans.each do |pan|
if pan.reading != nil && pan.amount != nil
accepted = pan.amount/pan.reading
elsif pan.reading != nil && pan.advisement != nil
accepted = pan.advisement/pan.reading
end
pan.update_attributes!(acceptance: accepted)
end
end
end
class Pan=1.week.ago
pan.update_属性!(读数:兰特(5.0..18.0))
其他的
pan.update_属性!(读:无)
结束
结束
结束
def自我评级
@全部
@平底锅。每个都做平底锅|
pan.update_属性!(金额:兰特(200..20000))
结束
结束
自我建议
@全部
@平底锅。每个都做平底锅|
如果泛读!=零和(泛阅读<9.0 | |泛阅读>14.0)
pan.update_属性!(通知:兰特(200..20000))
结束
结束
结束
自我接纳
@全部
@平底锅。每个都做平底锅|
如果泛读!=零和泛金额!=无
已接受=pan.amount/pan.reading
埃尔西夫·潘·雷丁!=零和泛建议!=无
已接受=泛建议/泛阅读
结束
pan.update_属性!(接受:接受)
结束
结束
结束
我试图通过每个方法一次更新一个属性,然后在种子文件中调用它。这是做这件事的好方法吗
我在这里遇到的两个问题是为什么pan1不能正确播种,当我自己创建panel1时,读取和接受被设置为它们的预定义值,但是当我添加15.doe时,它们被设置为null
其次,在self.reads中,我试图更新该字段,前提是该字段自上次读取以来已超过一周,并且该字段为零。有更好的方法写这个吗?一个问题是所有的类方法
self.reads
self.ratings
self.advice
self.accept
以每个方法的结果结束,each的结果始终是原始数组,您正试图在此字段中分配数组reading:Pan.reads,amount:Pan.ratings,adviction:Pan.advice,acceptance:Pan.accept
第二个问题是所有这些方法都会更新Pan
model的所有记录,因此当您调用15.times
块时,此方法更新了pan
的原始结果。一个问题是所有类方法self.reads
self.ratings
self.advice
self.accept
以每个
方法的结果结束,each的结果始终是原始数组,您正试图在此字段中分配数组reading:Pan.reads,amount:Pan.ratings,adviction:Pan.advice,acceptance:Pan.accept
第二个问题是,所有这些方法都会更新Pan
模型的所有记录,因此,当您调用15.times
块时,此方法会更新Pan
的原始结果,在种子设定之后,DB中是否有任何项?您是否尝试将create
替换为create代码>在种子文件中?如果记录无效且无法创建,它将引发异常。因为您在创建每个记录后都将其设置为nil<代码>平移。更新属性!(reading:nil)
我试着去掉else,认为这是问题所在,然而,即使在这种情况下,它也不能填充阅读。是否有其他方法生成随机小数?创建!并没有阻止它被创建。是的,数据库中有文件。在你的self.reads
方法中,@pan
单数是打字错误吗?因为您在@pans
plural上进行了下一步迭代,所以在种子设定之后,DB中是否有任何项?您是否尝试将create
替换为create代码>在种子文件中?如果记录无效且无法创建,它将引发异常。因为您在创建每个记录后都将其设置为nil<代码>平移。更新属性!(reading:nil)
我试着去掉else,认为这是问题所在,然而,即使在这种情况下,它也不能填充阅读。是否有其他方法生成随机小数?创建!并没有阻止它被创建。是的,数据库中有文件。在你的self.reads
方法中,@pan
单数是打字错误吗?因为下一步要在@pans
复数形式上迭代