У меня есть фид XML, который я собираю и анализирую в своем приложении Rails. Я начал реализовывать его как библиотеку в lib /, но мне показалось более логичным рассматривать его как модель. Для удобства я отношусь к нему как к модели ActiveRecord. Требование заключается в том, что он совместим с плагином will_paginate от mislav, хотя именно здесь у меня возникла проблема.
Я создал класс в app / models /, который наследуется от ActiveRecord :: Base, и просто переопределил метод поиска по умолчанию. Если есть более простой способ, я все уши. Но это работает.
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?