найти следующую и предыдущую строку объекта activerecord - PullRequest
1 голос
/ 31 октября 2011

В моем приложении rails у меня есть следующая функция на одной из страниц моего контроллера.

def tree
@jstree = Sub.find_by_sql("Select sequence, depth, node, imageid, range from.....several joins")
end

Теперь я хочу просмотреть цикл результатов и выполнить некоторые действия в зависимости от значения prev и nextrow.

<% @jstree.each do |tree| %>
<%= tree.sequence %>
<% end %>

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

Большое спасибо за все предоставленные предложения:)

Ответы [ 3 ]

3 голосов
/ 31 октября 2011

Это зависит от того, как вам на самом деле нужно его использовать (и, очевидно, первая и последняя записи не будут иметь предыдущих / следующих элементов).

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

@jstree.each_with_index do |elem, n|
    prev_elem = @jstree[n-1] unless n == 0
    next_elem = @jstree[n+1] unless n == @jstree.size-1
    # Etc.
    do_stuff_with_next if next_elem # Or
    if next_elem
        do_stuff
        do_other_different_stuff
    end
end
2 голосов
/ 31 октября 2011

Не знаю, соответствует ли это вашим потребностям: @jstree.each_with_index do |tree, index|, а затем вы можете найти предыдущее и следующее по @jstree[index-1] и @jstree[index+1] (не забудьте проверить, есть ли у вас первый или последний элемент).

0 голосов
/ 31 октября 2011

Вместо этого вы можете просто использовать each_with_index:

@jstree.each_with_index do |item, index|
...

Или, если вам нужно что-то более сложное, вот плагин, который выглядит специально для этого:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...