0

私は2つの関連モデルを手に入れました

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 に答える