简体   繁体   中英

Passing a variable into a models after_initialize method

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM