どのようにRailsのモデルとしてのストアとページ付けXMLデータへ

StackOverflow https://stackoverflow.com/questions/2089839

  •  21-09-2019
  •  | 
  •  

質問

私は、XMLは、私はプルダウンと私のRailsアプリで解析していますフィードがあります。私はlibにライブラリとしてそれを実装するために始めた/モデルとしてそれを治療するための私にはより論理的に思えました。利便性のために私はActiveRecordのモデルとしてそれを扱っております。要件は、私は問題を抱えていますところではあるが、それは、mislavのwill_paginateプラグインと互換性があることです。

私はActiveRecordの::基地から継承は、単に検索のデフォルトのメソッドをオーバーライドしていること/アプリ/モデルでクラスを作成しました。もっと簡単な方法があれば、私はすべての耳です。しかし、これは動作しています。

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試みは、全ジョブの数のカウントを取得するということです。これは、自動的に「ジョブからcount_all AS SELECT COUNT(*)」を実行してこれを行います。そのようなテーブルが存在しないので、もちろん、これは失敗します。

will_paginateのコードを変更せずにこの問題を修正する簡単な方法があるが、まだ標準モデルはwill_paginate正常に使用できるようにする?

役に立ちましたか?

解決

あなたは非常に簡単に任意のコレクションのpaginatableを作ることができる(?)ます。

Array.class_eval do
  def paginate(page = 1, per_page = 10)
    WillPaginate::Collection.create(page, per_page, size) do |pager|
      pager.replace self[pager.offset, pager.per_page].to_a
    end
  end
end

このコードはWillPaginateに配列をマッピングします::コレクション - のサイズのパラメータは、基本的には、レコードの数です。

あなたはどちらかのモデルに類似した何かを実装する、またはActiveRecordの...あなたはトラックダウンの検証や他のものを使用してあることを行っている場合を除きに本当の理由を使用することはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top