Ruby 如何使用自定义方法扩展DataMapper::Resource
我有以下代码:Ruby 如何使用自定义方法扩展DataMapper::Resource,ruby,jruby,datamapper,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
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
在活动记录中,这个概念对我来说很好。。。我正在使用JRuby来引起注意。我做错了什么?安德鲁
您可以将DataMapper::Resource视为实例(一行),将DataMapper::Model视为类(一个表)。现在,要更改资源或模型级别的默认功能,您可以向模型添加包含项或扩展项
首先,您需要将#paginate方法包装在一个模块中。我还添加了一个可能毫无用处的页面方法,以显示如何在需要时附加到资源
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)
希望有帮助