2014-01-13 74 views
0

我想在模型中使用類似於文件的數據庫的公用文件夾來做類似的事情。如何從模型方法訪問公用文件夾?

all_images = [] 
(1..100).each do |image_number| 
    if File.exists?("/img/#{image_number}.jpg") 
     # add image path to the list 
    end 
end 

有沒有辦法讓Rails以這種方式在公共目錄中「查看」文件?

+0

是的。如果您使用的是Rails 4,那麼您需要查看http://guides.rubyonrails.org/asset_pipeline.html。 – lurker

+0

給你的問題給出了很多次的答案,下次使用搜索 –

+0

Rails.root可能對你有用:http://stackoverflow.com/a/372​​4527/32453 – rogerdpack

回答

2

如果使用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 
0

您可以Rails.root.join('public', 'img', '1.jpg')

0

,用於檢查文件中都存在,你可以使用:

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 } 
相關問題