Как сравнить входные данные в Rails - PullRequest
0 голосов
/ 23 мая 2018

Я собрал данные и сохранил их в одной таблице.total, levelone, leveltwo, levelthree, rateone, ratetwo, ratethree и earn хранятся в таблице "Rate", которая вводится пользователем.

Я написал код для извлечения данных из таблицы и выполнения расчетов следующим образом:

if @rate.total < @rate.levelone
  @rate.earn = @rate.total * @rate.rateone
  @earn = @rate.earn
elsif @rate.levelone < @rate.total <= @rate.leveltwo
  @rate.earn = @rate.levelone * @rate.rateone
  +(@rate.total - @rate.levelone) * @rate.ratetwo
  @earn = @rate.earn
elsif @rate.leveltwo < @rate.total <= @rate.levelthree
  @rate.earn = @rate.levelone* @rate.rateone
  +(@rate.leveltwo - @rate.levelone) * @rate.ratetwo
  +(@rate.total - @rate.leveltwo) * @rate.ratethree
  @earn = @rate.earn

Он показывает:

undefined method `total' for nil:NilClass

Я не знаю, что произошлоВот.Есть ли способ извлечь данные и сравнить их?

Я использовал form_for для создания действия, после сохранения в базе данных я взял некоторые данные для сравнения и после этого сохранил результат в другом столбце., довольно сложный, как это:

create_table: rate do | t |

t.decimal :total
t.decimal :earn
t.decimal :levelone
t.decimal :leveltwo
t.decimal :levelthree
t.decimal :rateone
t.decimal :ratetwo
t.decimal :ratethree

total, levelone, two, three и rateone, два три из пользовательского ввода, будут сохранены всначала база данных, после чего я использую данные для сравнения и расчета, приведенных выше, после того, как данные о них заработают, они также будут сохранены.и показать результат пользователю.я должен сделать последний шаг с помощью обновления?спасибо всем

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Как уже упоминалось в моем комментарии, если вам нужно выполнить расчет, а затем сохранить данные, вы можете сделать это, например, с помощью обратного вызова before_save.Код должен быть примерно таким:

class Rate < ActiveRecord::Base

  before_save :make_calculation

  def make_calculation
    if  self.total < self.levelone
        self.earn = self.total * self.rateone
    elsif  self.levelone < self.total <= self.leveltwo
        self.earn = self.levelone * self.rateone + (self.total - self.levelone) * self.ratetwo
    elsif self.leveltwo < self.total <= self.levelthree
        self.earn = self.levelone * self.rateone + (self.leveltwo - self.levelone) * self.ratetwo + (self.total - self.leveltwo) * self.ratethree
  end

end

self - это объект класса Rate, обрабатываемый для сохранения в базе данных.

0 голосов
/ 23 мая 2018

Перед сравнением давайте проверим, является ли @rate not nil.таким образом вы можете избежать ошибки nil.в качестве альтернативы вы также можете сделать if @rate.present?

unless @rate.blank?
  if  @rate.total< @rate.levelone
      @rate.earn = @rate.total * @rate.rateone
      @earn = @rate.earn

  elsif  @rate.levelone < @rate.total <= @rate.leveltwo
      @rate.earn = @rate.levelone* @rate.rateone
                  +(@rate.total-@rate.levelone) *@rate.ratetwo
      @earn = @rate.earn

  elsif @rate.leveltwo < @rate.total <= @rate.levelthree
      @rate.earn = @rate.levelone* @rate.rateone
                  +(@rate.leveltwo-@rate.levelone) *@rate.ratetwo
                  +(@rate.total-@rate.leveltwo)*@rate.ratethree
      @earn = @rate.earn
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...