0

У меня есть простая модель с целыми значениями (я думаю, я установил их как целое в файле миграции, по крайней мере), и я просто пытаюсь увеличить их с помощью функции члена модели, но когда я пытаюсь добавить к ним я получаю ошибку «Undefined метод` +»для ноль: NilClass)Неопределенный метод '+' для nilclass с моделью рельсов (активная запись)

Любые советы здесь ??

def take() 
    @total -= 1 
    User.find(@poster_id).lifetime -= 1 
end 

def give() 
    @total += 1 
.... 

ничего более того, это просто просто не работает. Мне нужно каким-то образом их качать? Я обязательно инициализировал значения 0 при каждом экземпляре класса модели

+0

Привет, Есть ли столбец таблицы со значением по умолчанию 0? –

+0

@NitinSrivastava yes – Riptyde4

+0

Вы понимаете, что вы никогда не определяете переменную '@ total'? (что бы это ни было) –

ответ

1

Во-первых, если total - это столбец в базе данных (и вы говорите это), то в рамках метода экземпляра класса вы должны получить к нему доступ как total, а не @total. Во-вторых, если вы хотите обновить total атрибут вам необходимо, ну обновить :)

def take # notice no() - they are optional 
    update(total: self.total - 1) 
end 

def give 
    update(total: self.total + 1) 
end 

Аналоговая с poster_id (если, опять-таки, это столбец в БД) вы могли бы сделать:

user = User.find(poster_id) # notice not @poster_id 
user.update(lifetime: user.lifetime - 1) 
+0

Это не работает правильно, у меня есть два счетчика, а обновление одного - перезапись другого на 0. Обновление и update_attribute оба приводят к тому же – Riptyde4

+0

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

Смежные вопросы