Как получить доступ к предыдущей записи в блоке рельсов - PullRequest
0 голосов
/ 20 марта 2011

Так что в основном мне нужно вернуть значение предыдущего пункта.

например, я нахожусь на третьей точкеМне нужно point.kilometric_position точки second .

Часть моего действия контроллера вставлена ​​сюда.Заранее спасибо!

def calculate
  @points = Point.all

  # loop through all the points
  @points.each do |point|
    # calculate the current kilometric position
    if point.kilometric_position.nil?
      # kilometric_position = previous_kilometric_position + distance
    end
  end
end

Ответы [ 4 ]

4 голосов
/ 20 марта 2011
@points.each_with_index do |point, i|
  previous_point = @points[i-1] unless i==0

  next unless previous_point
  distance = point.distance_to(previous_point)
  # do something with distance
end
2 голосов
/ 11 мая 2011

Если вы хотите использовать более дружественный к рубину метод, используйте команду инжектирования так:

@points.inject do |previous,current|
  previous  # first time through, this is the first value
  current   # first time through, this is the second value

  # do a bunch of stuff

  previous = current
end
0 голосов
/ 21 марта 2011

Я мог бы сделать

def calculate
  # Why were you using @points rather than points?
  points = Point.all

  current_kilometric_position = 0
  # loop through all the points
  points.each do |point|
    point.kilometric_position = current_kilometric_position
    current_kilometric_position += distance
  end
end

, но ваш вопрос слишком расплывчатый - он не определяет, что такое distance, почему вы хотите, чтобы только точки с kilometric_position равными нулю вычисляли свою позицию,и каким должен быть kilometric_position первого point.

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

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

@previous_point = @points[@points.index(point)-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...