0

今、私の投稿コントローラーの下にメソッドがあります

 def main
    @post = Post.all
  end

 def show
    @post = Post.find(params[:id])
  end

ページごとに1つの投稿を表示し、その次と前のリンクを表示するための最も基本的で簡単な方法は何でしょうか。ここで私は参照していmain.html.erbます。たとえばlocalhost:3000/posts、そのページの下に、投稿を閲覧するための次のリンクと前のリンクを含めることができます。

これに何らかのajaxが必要でしょうか?そうでない場合は、単純なactiverecordやレールの他の要素を使用してこれを行うにはどうすればよいですか?

注:[次へ]をクリックした後、[URL]タブに投稿のパーマリンクを表示する必要があります。

4

2 に答える 2

1

あなたはこのようなことをすることができます。前と次のメソッドをモデルに追加します

def previous
  posts = where('id > ?', id).limit(1)
  if posts.nil?
    nil
    else
    posts.first
  end
end

def next
  posts = where('id < ?',id).limit(1)
  if posts.nil?
    nil
    else
    posts.first
  end
end

そして、あなたの見解では、あなたはこのようなことをすることができます。

 unless @post.next.nil? #to show the link to the next post
   link_to @post.next
 end
 unless @post.previous.nil? #to show the link to the next post
   link_to @post.previous
 end 

とにかく、前の投稿と次の投稿を取得するためにさらに2つのデータベースクエリを追加するため、この方法はそれほど最適化されていません。

于 2013-03-16T07:25:24.760 に答える
1

次のように、gem will_paginateを使用して、ページごとのデフォルトを1に設定できます。

class Post
  self.per_page = 1
end

will_paginateの詳細については、https: //github.com/mislav/will_paginateをご覧ください。

于 2013-03-16T11:42:08.443 に答える