我想在模型中使用類似於文件的數據庫的公用文件夾來做類似的事情。如何從模型方法訪問公用文件夾?
all_images = []
(1..100).each do |image_number|
if File.exists?("/img/#{image_number}.jpg")
# add image path to the list
end
end
有沒有辦法讓Rails以這種方式在公共目錄中「查看」文件?
我想在模型中使用類似於文件的數據庫的公用文件夾來做類似的事情。如何從模型方法訪問公用文件夾?
all_images = []
(1..100).each do |image_number|
if File.exists?("/img/#{image_number}.jpg")
# add image path to the list
end
end
有沒有辦法讓Rails以這種方式在公共目錄中「查看」文件?
如果使用asset pipeline訪問它,你要檢查的資產是否存在,在資產尋找它文件夾:
all_images = 1.upto(100).map do |image_number|
path = Rails.root.join("assets/images/#{image_number}.jpg")
path if File.exists?(path)
end.compact
如果您在public
文件夾,這是不推薦的(因各種原因)的資產,除非你使用的Rails < 3和/或自己建立了一些資產管理擴展,你可以看看它有:
all_images = 1.upto(100).map do |image_number|
path = Rails.root.join("public/img/#{image_number}.jpg")
path if File.exists?(path)
end.compact
您可以Rails.root.join('public', 'img', '1.jpg')
,用於檢查文件中都存在,你可以使用:
if File.exists?("#{Rails.public_path}/img/#{image_number}.jpg")
而這將工作無論文件系統:
if File.exists?(File.join(Rails.public_path, "img", "#{image_number}.jpg"))
要獲取所有現有文件,您可以鏈接#map
和#select
all_images = (1..100).
map { |i| File.join(Rails.public_path, "img", "#{i}.jpg") }.
select{ |path| File.exists? path }
是的。如果您使用的是Rails 4,那麼您需要查看http://guides.rubyonrails.org/asset_pipeline.html。 – lurker
給你的問題給出了很多次的答案,下次使用搜索 –
Rails.root可能對你有用:http://stackoverflow.com/a/3724527/32453 – rogerdpack