将变量传递给模型after_initialize方法

时间:2010-07-15 12:35:14

标签: ruby-on-rails ruby search model will-paginate

我有以下(严重简化)模型,它使用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 个答案:

答案 0 :(得分:6)

在initialize方法中添加页面参数(甚至更好的选项哈希参数):

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])

如果愿意,您甚至可以为选项哈希提供默认值。