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
复数形式上迭代