gpt4 book ai didi

ruby - 如何使用自定义方法扩展 DataMapper::Resource

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:53 25 4
gpt4 key购买 nike

我有以下代码:

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 record 中,这个概念对我来说很好用……我正在使用 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)

希望对您有所帮助!

关于ruby - 如何使用自定义方法扩展 DataMapper::Resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3470260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com