0

我有两个相关的模型

class Post
  belongs_to :subject
end

我需要获取按 'subjects'.'name' ASC, 'posts'.'updated_at' DESC 排序的帖子然后对于任何给定的id,根据给定的排序顺序获取 Post.find(id) 的下一个和之前的帖子。

我这样订购帖子:

Post.joins(:subject).order('subjects.name ASC, posts.updated_at DESC')

但是如何获得下一个和上一个帖子?

4

1 回答 1

0

你可以使用each_with_index方法。该方法的工作原理如下:

a=[1,2,3]
a.each_with_index {|item, index|
  puts index.to_s+"=>"+item.to_s
}

产生:

0=>1 1=>2 2=>3

现在您可以将排序后的数组存储在一个变量中,例如:

@posts=Post.joins(:subject).order('subjects.name ASC, posts.updated_at DESC')

而且,如果你想要一个 的下一个和上一个id,你可以这样做:

@next=nil
@previous=nil
@posts.each_with_index {|post, index|
      if post.id==id
        @next=@posts[index+1]
        @previous=@posts[index-1]
        break
      end
}
于 2012-11-17T19:17:24.563 回答