検索機能がある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' 学籍番号新しい順から
とりあえず、こんなもんで。
あ、自分で変更できたわけじゃないです。先生にお手伝いいただきました。(^ ^;
それにしても、このブログのデザイン、コード表示させるには狭いー。
ブログのレイアウトも変更したいな。。。