Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby,限制每个请求使用Find模块返回的文件数_Ruby On Rails_Ruby_File - Fatal编程技术网

Ruby on rails Ruby,限制每个请求使用Find模块返回的文件数

Ruby on rails Ruby,限制每个请求使用Find模块返回的文件数,ruby-on-rails,ruby,file,Ruby On Rails,Ruby,File,我有一个控制器,它调用find_photos方法,向它传递一个查询字符串(文件名) class BrandingPhoto循环内 ,不太难做你想要的,但是你需要考虑如何处理页面加载、文件名与UTF-8或Unicode字符以及嵌入/父目录之间添加或删除的条目。 这是你所说的基础的老校规: require 'erb' require 'sinatra' get '/list_photos' do dir = params[ :dir ] offset = params[ :o

我有一个控制器,它调用find_photos方法,向它传递一个查询字符串(文件名)

class BrandingPhotofound_photos对于这个问题,首先想到的是在退出循环后减少阵列。尽管另一种解决方案可能是为数组viz的大小添加一个分隔符,但这对于大量文件来说并不能很好地工作<代码>如果Buff.Posi.Studio长度>10 /代码>循环内

,不太难做你想要的,但是你需要考虑如何处理页面加载、文件名与UTF-8或Unicode字符以及嵌入/父目录之间添加或删除的条目。

这是你所说的基础的老校规:

require 'erb'
require 'sinatra'

get '/list_photos' do

  dir    = params[ :dir    ]
  offset = params[ :offset ].to_i
  num    = params[ :num    ].to_i

  files = Dir.entries(dir).reject{ |fn| fn[/^\./] || File.directory?(File.join(dir, fn)) }
  total_files = files.size

  prev_a = next_a = ''

  if (offset > 0)
    prev_a = "<a href='/list_photos?dir=#{ dir }&num=#{ num }&offset=#{ [ 0, offset - num ].max }'>&lt;&lt; Previous</a>"
  end

  if (offset < total_files)
    next_a = "<a href='/list_photos?dir=#{ dir }&num=#{ num }&offset=#{ [ total_files, offset + num ].min }'>Next &gt;&gt;</a>"
  end

  files_to_display = files[offset, num]

  template = ERB.new <<EOF
<html>
  <head></head>
  <body>
    <table>
    <% files_to_display.each do |f| %>
      <tr><td><%= f %></td></tr>
    <% end %>
    </table>
    <%= prev_a %> | <%= total_files %> files | <%= next_a %>
  </body>
</html>
EOF

  content_type 'text/html'
  template.result(binding)

end
在浏览器中,使用如下URL连接到正在运行的Sinatra服务器:

http://hostname:4567/list_photos?dir=/path/to/image/files&num=10&offset=0

我使用Sinatra是为了方便,但是常规的勇气是你想要什么的基础。如何将其转换为Rails术语留给读者作为练习。

您能为您正在寻找的行为编写一些测试/规范吗?您希望如何调用此方法?你将如何从你离开的地方继续下去?它有助于在规范中设计API,然后从那里开始工作。还可以看看Ruby的API,了解Ruby本身可以实现的功能。我看你可以用Enumerable中的方法将代码精简到一行,我想不出一个简单的方法来实现这一点。您可能希望将该发现封装在自己的类中,该类将记录目录列表并实现分页。你可以让它记忆一段时间,或者实现一种注册新图像的方法。如果需要这样做,最好将图像元数据存储在数据库中。您可能想查看用于图像管理的和gems。
ruby test.rb
http://hostname:4567/list_photos?dir=/path/to/image/files&num=10&offset=0