查找模块返回的文件数我有一个调用一个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次并抓取这些文件 - 将最后一个文件名存储在一个变量中或作为参数,然后将该变量发送回该方法,告诉它继续从该文件名搜索。
这假定文件每次都以相同的顺序循环,并且没有更简单的方法来完成此操作。
如果有任何建议,我很乐意听到他们/看到你如何做到这一点的一些例子。
谢谢。
你能为你正在寻找的行为写一些测试/规格吗?你想怎么称呼这个方法?你如何继续从你离开的地方?它有助于在规范中设计API,然后从那里开始工作。也可以看看Ruby的[Enumarable](http://rubydoc.info/stdlib/core/Enumerable)API,以了解Ruby本身已经可以实现的功能。我觉得你可以用Enumerable中的方法将代码细化到一行。 – iain
我想不出一个简单的方法来做到这一点。你可能想要在你自己的类中包装这个find来记忆目录列表并实现分页。您可以记忆一段时间,或实现一种注册新图像的方式。如果你需要做这样的事情,你最好将图像元数据存储在数据库中。你可能想看看图像管理的[Dragonfly](https://github.com/markevans/dragonfly)和[Paperclip](https://github.com/thoughtbot/paperclip)gems。 –