読者です 読者をやめる 読者になる 読者になる

検索機能があるindexにwill_pagenateを追加したときの巻

RoRで作ってる学生一覧に検索機能があったんですけど、8000件近くをそのまま表示させようとしてめっちゃ遅くて、will_pagenateを入れたときのコードについて。
最初は何で表示に時間がかかるかわからなかったんですけど、コレ入れたらかなり快適になりました。
それだけ使うなら使いやすいと思います。オススメ。
でも、will_pagenateだけの設定はここでは省略します。またそのうち・・・。


will_pagenateのインストールは、gemで簡単にw

app/controllers/students_controller.rb

  def search
    @search_key = params[:key]
    @students = Student.search(params)
    if (@search_key=params[:key]||"").empty?
      @search_key = nil
    end

    render :action => 'index'
  end

  def index
    @students = Student.search(:page => params[:page])

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @students }
    end
  end

app/models/student.rb

  def self.search(params)
    conditions =
      ["name like ? or name_kana like ? or student_number like ? or state like?",
        '%' + params[:key] + '%', '%' + params[:key] + '%', '%' + params[:key] + '%',
        '%' + params[:key] + '%'] if params[:key]
    Student.paginate(:page => params[:page], :per_page => 50, :conditions => conditions,
        :order => 'student_number desc')
  end

#"名前"と"かな"と"学生番号"と”state=在籍/卒業生”が、検索キーワードです
#:per_page => 50 で1ページ50件
#:order => 'student_number desc' 学籍番号新しい順から


とりあえず、こんなもんで。
あ、自分で変更できたわけじゃないです。先生にお手伝いいただきました。(^ ^;
それにしても、このブログのデザイン、コード表示させるには狭いー。
ブログのレイアウトも変更したいな。。。