Ruby on rails 在初始化方法之后将变量传递到模型中

Ruby on rails 在初始化方法之后将变量传递到模型中,ruby-on-rails,ruby,search,model,will-paginate,Ruby On Rails,Ruby,Search,Model,Will Paginate,我有下面的(高度简化的)模型,它将使用 class Search < ActiveRecord::Base attr_reader :articles def after_initialize @articles = Article.paginate_by_name name, :page => 1 end end 这一切都很好,但请注意,我将页码硬编码为1,问题是将params[:page]值传递到after_initialize方法中,有人能推荐一种优

我有下面的(高度简化的)模型,它将使用

class Search < ActiveRecord::Base

  attr_reader :articles

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

end
这一切都很好,但请注意,我将页码硬编码为1,问题是将params[:page]值传递到after_initialize方法中,有人能推荐一种优雅的方法来实现这一点吗

谢谢

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

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

As
Search
extends
ActiveRecord::Base
请记住包括对
super(Search)
的调用,并使
Search
也成为可选参数,即
def initialize(Search={},options={})
以保留现有的行为。感谢您的帮助,现在一切正常。小问题,请确保在分配选项后调用super,因为super将在初始化回调后触发。
@search = Search.new(params[:search], :page => params[:page])