Неправильные рельсы - PullRequest
       2

Неправильные рельсы

0 голосов
/ 20 марта 2019

Я пытаюсь заполнить базу данных, используя методы модели, но она не заполняет поля правильно.Во-первых, мои начальные данные выглядят так:

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, однако при чтении и принятии оба значения показывают ноль вместопредустановленные значения, которые я пытался определить.Где моя ошибка в этом?Вот все методы, которые используются в модели:

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

Я пытаюсь обновлять атрибуты по одному через каждый метод, а затем вызываю его в начальном файле.Это хороший способ сделать это?

Два вопроса, которые у меня возникают из-за этого, заключаются в том, почему pan1 не заполняется правильно, когда я сам создаю только panel1, чтение и принятие устанавливаются в их предопределенные значения, но когда я добавляю 15.times,они установлены в ноль?

Во-вторых, в self.reads я пытаюсь обновить это поле, только если с момента последнего чтения прошло более недели, и только если это поле равно нулю.Есть ли лучший способ написать это?

1 Ответ

2 голосов
/ 20 марта 2019

Одна проблема состоит в том, что все методы класса self.reads self.ratings self.advise self.accept заканчиваются результатом метода each, результатом каждого всегда является исходный массив, и вы пытаетесьназначьте массив в этих полях reading: Pan.reads, amount: Pan.ratings, advisement: Pan.advise, acceptance: Pan.accept

Вторая проблема заключается в том, что все эти методы обновляют все записи модели Pan, поэтому при вызове блока 15.times эти методы обновляют исходный результат pan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...