我正在使用Ruby on Rails 3,我正在尝试创建一个插件以在Rack 中间件中使用。这是我第一次体验这种体验,所以如果我写错了就要耐心等待。
我需要的是在运行find
方法后在 ActiveRecord上调用方法。也就是说,我想做这样的事情:
@accounts = Account.find([1,2,3]).to_page
方法to_page
应该更改@accounts
数据中的一些信息而不更改对象结构本身(例如:如果“原始”@accounts
是一个数组,它应该保持一个数组)。
此时在我的插件文件夹中,我有以下文件:
# init.rb
require 'sl_pagination'
ActiveRecord::Base.send(:include, SlPagination)
#sl_pagination.rb
module SlPagination
extend ActiveSupport::Concern
module ClassMethods
def to_page
# see below for more info
end
end
module InstanceMethods
#none
end
end
在Rack中间件中我有:
require 'sl_pagination'
...
如果在中间件中我使用Account.find([1,2,3]).to_page
声明
#sl_pagination.rb
def to_page
return "Test_account_page"
end
它会工作,我也将检索“Test_account_page”值,但我找不到一个解决方案来改变并返回ActiveRecord本身,如上所述。那么,如何修改ActiveRecord?
我试图在self
方法中return self
和to_page
“玩”,但它的接缝不起作用。我也想过要使用acts_as_something
,但我仍然必须研究和理解(如果你在使用acts_as
时解释,那就是盈余!:-))。此外,我不知道后一种解决方案能否帮助我完成我的目标。
答案 0 :(得分:0)
您需要挂钩ActiveRecord::Relation
以扩展AR并像其他AR功能一样运行。您可以在http://railscasts.com/episodes/239-activerecord-relation-walkthrough中找到有关ActiveRecord::Relation
的更多详细信息。