Арифметическая операция Rails Ошибка: неопределенный метод `* 'для nil: NilClass - PullRequest
0 голосов
/ 04 марта 2012

У меня есть две таблицы: User, table1 и table2. User has_many table1. User has_many table2. table2 имеет 3 столбца: column1, column2, column3. Я хочу умножить значение в column1 и column2 на число и сохранить его в column3.

В моем файле table2.rb я определил этот метод:

def calculate(tablerow)
  tablerow.column3 = (tablerow.column1 * 1) + (tablerow.column2 * 2) 
end     

У меня есть метод в table1Controller, который имеет метод что-то сделать. Затем этот метод вызывает приведенный выше метод table2#calculate и передает соответствующий параметр.

Когда я вызываю метод calculate, я получаю следующее сообщение об ошибке:

NoMethodError in table1Controller#dosomething
undefined method `*' for nil:NilClass

Теперь я знаю, что в методе calculate что-то не так. Но я не уверен, как добиться того, чего я пытаюсь достичь, а именно просто выполнить вычисление значения 2 столбцов и сохранить сумму в третьем столбце. Мое приложение использует SQLite3.

1 Ответ

2 голосов
/ 04 марта 2012

undefined method * for nil:NilClass означает, что одно из значений, которые вы пытаетесь умножить, является пустым. В вашем примере tablerow.column3, вероятно, ноль. Я думаю, что вы либо опечатали свой код, либо неправильно указали пример кода, потому что код не соответствует тому, что, как вы говорите, вы пытаетесь достичь.

Сделайте это, это также должно устранить необходимость вызывать это действие из вашего контроллера и просто сохранять значение столбца 3 каждый раз, когда вы сохраняете или создаете запись в таблице 2

class Table2 < ActiveRecord::Base
  before_save :calculate_column3

  def calculate_column3
   self.column3 = (self.column1 * 1) + (self.column2 * 2) 
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...