Модель Rails, как создать массив на основе последнего значения? - PullRequest
0 голосов
/ 28 декабря 2011

В моей модели у меня есть:

attr_accessor :ppris

def last(x)
    @ppris = []

    if @ppris == nil
        @ppris << 1
    else
        @ppris << 2
    end
end

def pakke
  if self.pakkes.count > 0
  self.pakkes.each{|pakke| beregn_pakke(pakke.price)}
  end
end

Имеется нормальный цикл для модели моей компании.

<%= company.ppris %>

В представлении значение для ppris равно [2] для всех строк.

В моей таблице 5 строк компании. Я ожидаю, что значение для ppris будет: [1, 2, 2, 2, 2] для каждой компании.

Я также изменил метод модели на:

def last(x)
@ppris = []
if @ppris == nil
@ppris << 1
else
@ppris << @ppris.last + 1
end
end

Но тогда я получаю NoMethodError. Я бы не ожидал, что ошибка будет:

[1, 2, 3, 4, 5]

Что не так с моей моделью? Почему я не могу создать массив, который получает добавленные значения для каждого пакета?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011
@ppris = []
if @ppris == nil

@ppris никогда не будет nil. Это будет empty?, но не nil.

Обращаясь к вашему комментарию

Вы создаете новый массив каждый раз, когда вызываете метод. Если вам нужен один массив, связанный с экземпляром, создайте его в обратном вызове after_initialize .

0 голосов
/ 28 декабря 2011

Вы, вероятно, хотите это:

def last(x)
  @ppris = []
  if @ppris.empty?
    @ppris << 1
  else
    @ppris << @ppris.last + 1
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...