XML 피드가 있습니다. 레일즈 애플리케이션에서 당겨서 파싱하고 있습니다. lib/lib에 라이브러리로 구현하기 시작했지만 모델로 취급하는 것이 더 논리적 인 것처럼 보였습니다. 편의상 ActiveRecord 모델로 취급하고 있습니다. 요구 사항은 mislav의 will_paginate 플러그인과 호환된다는 것인데, 그것이 내가 문제가있는 곳이기는하지만.XML 데이터를 레일스 모델로 저장하고 페이지를 매기는 방법
ActiveRecord :: Base에서 상속받은 클래스를 app/models /에 만들고 단순히 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를 정상적으로 사용할 수 있도록 허용할까요?