Передача переменной в метод after_initialize моделей - PullRequest
3 голосов
/ 15 июля 2010

У меня есть следующая (сильно упрощенная) модель, которая использует will_paginate

class Search < ActiveRecord::Base

  attr_reader :articles

  def after_initialize
    @articles = Article.paginate_by_name name, :page => 1
  end

end

, а код контроллера в моем действии show

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

Это все работает нормально, но обратите вниманиея жестко закодировал номер страницы в 1, проблема заключается в передаче значения params [: page] в метод after_initialize, может кто-нибудь предложить элегантный способ сделать это, пожалуйста?

Спасибо

1 Ответ

6 голосов
/ 15 июля 2010

Добавьте параметр страницы (или, что еще лучше, параметр хеш-функции) к методу инициализации:

class Search
  def initialize(search, options = {})
    @options = options
  end

  def after_initialize
    @articles = Article.paginate_by_name name, :page => @options[:page]
  end
end

, а затем в вашем контроллере:

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

Вы даже можете указать значение по умолчаниюзначения для хэша опции, если хотите.

...