0

find_photos メソッドを呼び出し、クエリ文字列 (ファイル名) を渡すコントローラーがあります。

class BrandingPhoto < ActiveRecord::Base

  def self.find_photos(query)
    require "find"

    found_photos = []

    Find.find("u_photos/photo_browse/photos/") do |img_path|
        # break off just the filename from full path
        img = img_path.split('/').last

        if query.blank? || query.empty?
        # if query is blank, they submitted the form with browse all- return all photos
            found_photos << img
        else
        # otherwise see if the file includes their query and return it
            found_photos << img if img.include?(query)
        end
    end

    found_photos.empty? ? "no results found" : found_photos
  end
end

これは、写真でいっぱいのディレクトリを検索しているだけです。これを裏付けるテーブルはありません。

理想的には、find_photos によって返される結果の数を約 10 から 15 に制限し、必要に応じて次の 10 から 15 の結果をフェッチできるようにしたいと考えています。

これを行うコードには、10回ループしてそれらのファイルを取得することが含まれる可能性があると考えていました-最後のファイル名を変数またはパラメーターとして保存し、その変数をメソッドに送り返し、そこから検索を続行するように指示しますファイル名。

これは、ファイルが毎回同じ順序でループされること、およびこれを達成するためのより簡単な方法がないことを前提としています。

何か提案があれば、ぜひ聞いてみたい/これをどのように達成するかの例をいくつか見てみたい.

ありがとうございました。

4

2 に答える 2

0

この問題について最初に頭に浮かぶのは、ループから抜け出した後に配列を削減することです。ただし、これは大量のファイルではうまく機能しません。別の解決策は、配列のサイズのブレークを追加することです。break if found_photos.length > 10ループの内側

于 2012-12-14T04:17:35.593 に答える