ruby – 如何使用自定义方法扩展DataMapper :: Resource
发布时间:2020-12-17 01:44:28 所属栏目:百科 来源:网络整理
导读:我有以下代码: 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 pa
我有以下代码:
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进行通知.我做错了什么? 解决方法
安德鲁,
您可以将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) 希望有所帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |