找到activerecord obj的下一行和上一行

时间:2011-10-31 14:40:14

标签: ruby-on-rails

在我的rails应用程序中,我的控制器页面中有以下功能。

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

我现在想循环遍历结果集并根据prev和next行的值执行一些操作。

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

我想知道如何在上面的循环中获取下一个和上一个行值

非常感谢所提供的所有建议:)

3 个答案:

答案 0 :(得分:3)

这取决于你实际需要如何使用它(显然,第一个和最后一个记录不会有上一个/下一个元素)。

如果您执行了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

答案 1 :(得分:2)

不知道这是否符合您的需求:@jstree.each_with_index do |tree, index|然后您可以通过@jstree[index-1]@jstree[index+1]找到上一个和下一个(不要忘记检查您是否在第一个或最后一个项目。)

答案 2 :(得分:0)

您可以改为使用each_with_index:

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

或者如果你需要更复杂的东西,这里有一个看起来很简单的插件:acts_as_ordered