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

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

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

Railsによるブログアプリ、記事閲覧ページ内の「前の記事へ|次の記事へ」の実装 よくあるブログの記事閲覧時(scaffoldで言う所のshowアクション)に下の方にある、 「前の記事へ|次の記事へ」 というリンクの実現につまずいております。。。 users:ユーザー情報のモデル blog_entries:ブログの記事モデル それぞれのテーブルはuser_id、blog_entry_idと言った感じで紐付いています。 どのユーザーが記事を書いても、blog_entryのテーブルのレコードとして格納され、 indexページなどで、ユーザー毎の記事をとり出す時は、以下のようにしています。 @user = User.find(params[:user_id]) @blog_entries = BlogEntry.paginate( :conditions => [ 'user_id = ?', @user ], :page => params[:page], :per_page => 10, :order => "created_at DESC" ) $page_title = "#{@user.name}さんの日記一覧" このような場合、 記事閲覧時の「前の記事へ|次の記事へ」のリンクを実装する場合、 どのようなアイデアがございますでしょうか。 詳細に欠ける質問で大変恐縮ではございますが、 皆さまにお力添えいただければ幸いです。 宜しくお願いいたします!

  • b-s-a
  • お礼率100% (2/2)
  • Ruby
  • 回答数2
  • ありがとう数30

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

  • ベストアンサー
回答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キーでスコープするにはどうするのがベターでしょうか。

関連するQ&A

  • 各ユーザーの記事が閲覧できるブログシステム

    (複数人の)ユーザーが記事を投稿し、各ユーザーのURLでそのユーザーの記事が閲覧できるブログシステムを考えております。 しかし、各ユーザのURLにアクセスしたとき、そのユーザーのデータをどのような方法で取得すれば良いのかわからず質問させていただきました。 以下、詳細となります。 ※MYSQLデータベーステーブル ・user_table id 名前 10 山田 11 鈴木 12 伊藤 ・,article_table id user_id url     text 1 10    yamada  山田です。 2 11    suzuki   鈴木です。 3 12    itou     伊藤です。 ※流れ 1,各ユーザーは管理画面にログイン 2,記事投稿ページで本文を入力し、投稿ボタンを押すとarticle_tableにデータが格納される。 3,domain.com/○○○(〇に入るのはyamadaなど、各ユーザーのurl) にアクセスすると、そのユーザーが投稿したarticle_tableのtextが表示される。) ※質問内容 domain.com/〇〇〇に、そのユーザーが投稿したtextを表示されるには、 <?php $st=$db->prepare("select * from article_table where user_id=:user_id"); $st->execute(array(":user_id"=>$user_id)); $data=$st->fetch(); echo $data["text"]; 、、、、 ?> といったように、$user_idによってそのユーザーのデータを引っ張ってくるかと思いますが、このとき$user_idの値はどのように得る方法が一般的なのでしょうか? ・方法(1) URLをdomain.com/〇〇〇?user_id=△△△として$_GETで取得すれば可能ですが、 一般的なアメブロなどのブログシステムでは、そのような変数はURLについていないかと思います。 ・方法(2) あらかじめユーザーごとのフォルダにuser_id.txtのようなファイルを用意し、そこに書かれているidを読み込んでいるのでしょうか? ・方法(3) 管理画面からユーザーが記事を投稿した時に、$user_idをファイルに埋め込んだ動的なphpファイルを生成して保存しているのでしょうか? <?php $user_id=10; $st=$db->prepare("select * from article_table where user_id=:user_id"); $st->execute(array(":user_id"=>$user_id)); $data=$st->fetch(); echo $data["text"]; 、、、、 ?> このソースごと含めてユーザーファイルを生成してしまう。 ただ、やり方が今のところわかっておりません。 ・方法(4) 別のなんらかの方法 ご存知の方いらっしゃれば、ご回答いただければ幸いです。 尚、各ユーザーURLのページは、静的なページ(html)ではなく、動的なページ(php)となります。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • FC2ブログの最新記事を常に表示するURL

    一記事単位だと http://ブログ名.blog数字.fc2.com/blog-entry-数字.html ってなってますよね。 これで、そのURLをクリックすると 常に最新記事が表示されるURLってありませんでしょうか?。 これが私のブログの最新記事 http://ブログ名.blog数字.fc2.com/××× って貼りたいんです(貼ったらそのままにしておく)。 なければ、他の案でもいいので教えてください。 よろしくお願いします。

  • ブログの記事を1ページで表示したいです。

    ブログの記事を1ページで表示したいです。 こんにちは。 今私は気になったブログ記事をevernoteに入れて管理しています。ですが、長い記事の場合、次のページへというボタンを一々押してはevernoteへの転送をしなくてはいけません。転送された側のevernoteでもページ数ぶんだけノートが作成されてしまうのであまり見栄えがよくありません。 どうにかしてブログ記事を1ページで表示して、evernoteへの転送を一度で済ませたいのですが、何か良い方法はありませんでしょうか?(アプリや閲覧時の設定など) どうぞよろしくお願い致します。

  • ブログ閲覧

    ブログ閲覧 ブログ初心者です。 == <はてなダイアリー>と言うブログサイトの説明によれば、 非公開設定にしておき、特定の人だけに自分のブログを見せ たい場合に、なぞなぞ形式で<私の好きな花は?答えモミジ> と言う設定にしておき、相手がモミジと正解の答えを書けた 人のみ閲覧出来るとなっています。 特定の相手に 私のID,PWを教えなくてもいいのですよねぇ~。 相手にID,PWを教えてアクセスして来られるのであれば、 なぞなぞ形式の 質問回答 の設定を行う意味なさないと思うのです。 === 片や、私が公開設定している場合は、誰でも私のブログを見る 事ができる事になっていますが、偶然通りがかりに目に付いた のでアクセスされたと言う事なのでしょうか??  アクセスして来られた方は、私のID,PWを知らないのにどうして 私のブログにエントリー出来るのでしょう?? 公開の場合はID,PWに関係なく他人が閲覧出来るようになっているの でしょうか? 但し書き込み内容変更等の必要時はID,PWは必要って事でしょうか? 何が聞きたいのかお解り頂けないかもしれません。すみません。   

  • fc2ブログ、記事のタイトルにリンクを貼る方法

    最近fc2ブログに引っ越しました。 http://●●●.blog.fc2.com/ のアドレスで、数個の記事が出てきますよね。 ここからひとつひとつのブログタイトルをクリックすると http://●●●.blog.fc2.com/blog-entry-17.html で表示される個別のブログ記事に飛べるようにしたいのですが やり方を教えてください。 ※ブログ初心者ゆえ、あやまった表現の仕方をしているかもしれまぜん。 もしそうならご指摘いただけるとありがたいです。

  • ブログ記事一文字目を大きくしたい

    よろしくお願いします。ブログの記事の一文字目を大きくしたくて検索しくした。 http://kumacrow.blog111.fc2.com/blog-entry-519.html#css1 このようにしたいのですが、まず、CSSをはりつけました。CSSの一番下です。(入れる位置に問題はないでしょうか? HTMLのほうは、どこに埋め混んだらよいのでしょうか? ちなみにですが、この設定をすれば、常に一文字目が大きくなると考えてよいのですよね? よろしくお願いいたします。 ちなみにブログはFC2で、このタイプを使っています。 http://admin.blog.fc2.com/control.php?mode=design&process=download&no=10273

  • seesaaブログでカテゴリ内の記事一覧

    seesaaブログのカスタマイズの件で質問です。 seesaaブログでカテゴリ内の記事一覧 http://tarikihongan.blog15.fc2.com/blog-entry-144.html というブログの記事があります その記事の通りにhtmlに書き加えるとカテゴリの記事一覧が現れて、これは便利だと思いました。 そこで、これをサイドバーで出来ないかと思いまして自由形式の方で再現しようといろいろ試してみたのですがどうも上手くいきません。 (その自由形式はカテゴリページでのみ表示する設定にします) そのブログの管理人さんは多忙らしく返答ももらいにくそうなのでこちらで質問させていただきます。 助言いただければ幸いです。

  • FC2ブログ 記事のHTML表示方法 初歩

    初歩的な質問です。 FC2ブログで、ブログの練習をしています。 記事の日付を消したいと思うのですが、 --- http://10plate.blog44.fc2.com/blog-entry-104.html HTMLを編集します。 [ <%topentry_year>/<%topentry_month>/<%topentry_day> <%topentry_hour>:<%topentry_minute> ]を削除してください。 --- とありますが、記事のHTMLは、どの様にしたら表示をすることが出来るのですか? よろしくお願い致します。

  • blogに記事インデックスを付けたい

    はじめまして。 livedoor Blogのトップページに記事インデックスを付ける事は可能でしょうか? 例としてこのようなレイアウトです。 http://hiyokokun.blog2.fc2.com/?style2=hiyoko-dog&index このサイトのページ上部 「new entry」の部分を指します。 livedoor Blogは個別に記事のカスタマイズ(HTMLの入力)が可能です。 そこをいじれば、可能なのではないか?・・と考えてしまいます。 可能であれば、どのようにすると出来るのか。 教えて下さると幸いです。 ・・本来このカテゴリに質問すべきでは無い内容ですが 回答の内容から推測すると、みなさまにご教授頂いた方がより期待に沿った回答が得られると判断した為、こちらに質問させて頂きました。 ご容赦下さい。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • mt5のブログで記事を小分けにしたい

    MovableType5を使いブログを作っているのですが、 思い通りに行かず四苦八苦しております。 添付した画像の様に、投稿したブログ記事をボックス(枠やらテーブル)で小さくまとめ、三つセットを横並びで配置し、ボックスかテキストに該当する記事へのリンクを積める物(ボックスの中には記事は全て載らない。ボックスサイズに合わせて途中で文章が終わり、リンクで該当記事(全文表示)へ)を作りたいのです。 ブログのエントリを小分けして並べる方法を見つける事すら出来ず、ここに辿り着きました どなたか知恵を貸していただければ幸いです、よろしくお願いします