Comment.rb: (モデル)
PerPage = 3
scope :paginate,
lambda { |page, per_page|
page = 1 if not page.present? or page <= 0
per_page = PerPage if not per_page.present? or per_page <= 0
limit = per_page
offset = (page - 1) * limit
limit(limit).offset(offset)
}
CommentsController: (コントローラ)
def index
@comments = Comment.paginate(params[:page].to_i, nil)
if not params[:page].blank?
@morepage = params[:page].to_i + 1
else
@morepage = 2
end
@morepage = nil if Comment.paginate(params[:page].to_i+1, nil).count.zero?
respond_with @comments
end
index.html.haml: (ビュー)
%div#comments
- if @comments.blank?
%p コメントないお。
- else
= render 'comments/comments'
= render 'comments/more'
_comments.html.haml:
- @comments.each do |comment|
%ul
%div{:id => "comment_"+comment.id.to_s}
%li= comment.message
_more.html.haml:
- if @morepage
%div#more
%a.more= link_to "もっと読む", {:page => (@morepage)},
:method => :get, :remote => true
index.js.rjs:
page.insert_html(:bottom, "comments", :partial => "comments/comments",
:locals => {:comments => @comments})
@comments.each do |comment|
page["comment_" + comment.id.to_s].visual_effect :highlight
end
page.replace_html :more, :partial => "more"
なんでこんなに長くなるかねぇ…。
実際のコードから抽出したんで間違いなどあるかもですが、自分用なので良しとする!
それからページネーションは Will_paginate を使えばいいんじゃって話もありますが、ボク自身が link_to :remote の記法に慣れておきたかったことと、 RJS の何たるかをちょっとでも理解してから使いたかったからです。でもこの場合 Comment.next_page とかの定義がわからん。おかげでコントローラの中で「もっと読む」を表示するかどうか調べてるし、全体的にダサいのはあれですね、書いたやつのせいですね。
さて、とりあえず push しておきますかね…。
-- 押してねっ→BlogPeople「趣味の世界」ブログランキング --
0 件のコメント:
コメントを投稿