Tutorial :Passing a variable into a models after_initialize method



Question:

I have the following (heavily simplified) model, that uses will_paginate

class Search < ActiveRecord::Base      attr_reader :articles      def after_initialize      @articles = Article.paginate_by_name name, :page => 1    end    end  

and the controller code in my show action is

@search = Search.new(params[:search])  

This all works fine, but notice i hard coded the page number to 1, problem is passing params[:page] value into the after_initialize method, can anyone suggest an elegant way to do this please?

Thanks


Solution:1

Add a page parameter (or even better an options hash parameter) to the initialize method:

class Search    def initialize(search, options = {})      @options = options    end      def after_initialize      @articles = Article.paginate_by_name name, :page => @options[:page]    end  end  

and then in your controller:

@search = Search.new(params[:search], :page => params[:page])  

You can even supply default values to the option hash, if you like.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »