ded*_*ded 3 ruby jruby datamapper
我有以下代码:
module DataMapper
  module Resource
   @@page_size = 25
   attr_accessor :current_page  
   attr_accessor :next_page
   attr_accessor :prev_page
  def first_page?
    @prev_page
  end
  def last_page?
    @next_page      
 end
  def self.paginate(page)
    if(page && page.to_i > 0)
      @current_page = page.to_i - 1
    else
      @current_page = 0
    end
    entites = self.all(:offset => @current_page  * @@page_size, :limit => @@page_size + 1)
    if @current_page > 0
      @prev_page = @current_page
    end
    if entites.size == @@page_size + 1
      entites.pop
      @next_page = (@current_page || 1) + 2
    end
    entites
  end
end
结束
然后我打电话给#paginate:
@photos = Photo.paginate(params[:page])
并得到以下错误:
application error
NoMethodError at /dashboard/photos/
undefined method `paginate' for Photo:Class
在Active记录中,这个概念对我来说很好......我正在使用JRuby进行通知.我做错了什么?
小智 12
安德鲁,
您可以将DataMapper :: Resource视为实例(一行),将DataMapper :: Model视为类(表).现在要更改资源或模型级别的默认功能,您可以在模型中附加包含或扩展.
首先,您需要将#paginate方法包装在模块中.我还添加了一个可能无用的#page方法来显示如何在需要时附加到资源.
module Pagination
  module ClassMethods
    def paginate(page)
      # ...
    end
  end
  module InstanceMethods
    def page
      # ...
    end
  end
end
在您的情况下,您希望#paginate在模型上可用,因此您可以:
DataMapper::Model.append_extensions(Pagination::ClassMethods)
如果您发现自己需要为每个资源添加默认功能,请执行以下操作:
DataMapper::Model.append_inclusions(Pagination::InstanceMethods)
希望有所帮助!