• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Railsによるブログアプリ、記事閲覧ページ内の「前の記事へ|次の記事)

Railsによるブログアプリ、記事閲覧ページ内の「前の記事へ|次の記事へ」の実装

このQ&Aのポイント
  • Railsによるブログアプリの記事閲覧ページ内で、「前の記事へ|次の記事へ」というリンクの実装につまずいています。
  • ユーザー情報とブログ記事のテーブルが紐付いており、各ユーザーの記事を取得する際は条件指定して取得しています。
  • 具体的な「前の記事へ|次の記事へ」のリンクの実装方法についてアドバイスをいただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1です。申し訳ありません。userをすっかり忘れてました。 userのblog_entriesに対するhas_many(何を使われているかによりますが)宣言で [userモデル] has_many :blog_entries do def find_by_prev time find :first, :conditions=>["created_at < ?",time],:order =>"created_at DESC" end def find_by_next time find(:first,:conditions => ["created_at > ?",time],:order =>"created_at ASC") end end 使い方 @user.blog_entries.find_by_next @blog_entry.created_at @user.blog_entries.find_by_prev @blog_entry.created_at では、どうでしょうか?

b-s-a
質問者

お礼

なるほど。 ありがとうございます! 実装してみた所、問題なく動作いたしました。 前回ご教授いただいたあと、自分のやりかたとしてnamed_scopeを使ってのやり方で凌いでおりましたが、こちらの方が直感的ですね。 参考になりました。

その他の回答 (1)

回答No.1

閲覧している記事を元に前後を検索するしかないんですかね。。。? BlogEntryクラス内で以下のような関数を定義 [model] def self.find_by_prev time   self.find(:first,:conditions => ["created_at < ?",time],:order =>"created_at DESC") end def self.find_by_next time self.find(:first,:conditions => ["created_at > ?",time],:order =>"created_at ASC") end [controller] @blog_entry = BlogEntry.find(params[:id]) @prev = BlogEntry.find_by_prev @blog_entry.created_at @next = BlogEntry.find_by_next @blog_entry.created_at [view]※xxxxxxはルーティングによっても変わるのでお任せします。 <%= link_to "next",xxxxxx_path(@next) if @next %> <%= link_to "prev",xxxxxx_path(@prev) if @prev %> まったく同じ時間に投稿された2つの記事とか対応はできません。 微妙な回答で申し訳ないです・・・。

b-s-a
質問者

お礼

早速ありがとうございます。 なるほど。 timestampを使うやり方ですね。 勉強になります。 しかしこのやり方ですと全ユーザーの記事が対象になってしまいます。。 blog_entries内のuser_idキーでスコープするにはどうするのがベターでしょうか。