我有一个 XML 提要,我正在拉下并在我的 Rails 应用程序中解析。我开始将它实现为 lib/ 中的一个库,但对我来说将它视为一个模型似乎更合乎逻辑。为方便起见,我将其视为 ActiveRecord 模型。一个要求是它与 mislav 的 will_paginate 插件兼容,尽管这是我遇到问题的地方。
我在 app/models/ 中创建了一个继承自 ActiveRecord::Base 的类,并简单地覆盖了 find 的默认方法。如果有更简单的方法,我会全力以赴。但这是有效的。
class Job < ActiveRecord::Base
def self.columns() @columns ||= []; end
def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
end
column :title, :string
column :company, :string
def self.find(*args)
url = "http://example.com"
xml = Net::HTTP.get_response(URI.parse(url)).body
doc = REXML::Document.new(xml)
if args.first.to_s == 'all'
results = Array.new
doc.elements.each('response/results/result') do |r|
job = self.new(
:title => r.elements['jobtitle'].text,
:company => r.elements['company'].text
)
results.push(job)
end
results
end
end
end
因此,随着这项工作,下一步是尝试对集合进行分页。为此,我尝试使用 mislav 的 will_paginate,因为我将这个插件用于我的典型模型。问题是 will_paginate 尝试获取总作业数的计数。它通过自动运行“SELECT count(*) AS count_all FROM jobs”来做到这一点。当然这会失败,因为不存在这样的表。
在不修改 will_paginate 的代码的情况下,有没有一种简单的方法可以纠正这个问题,但仍然允许标准模型正常使用 will_paginate?