2014-01-13 4 views
0

Я хочу сделать что-то подобное в модели, используя общую папку, такую ​​как db для файлов.Как получить доступ к общей папке из метода модели?

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

ответ на ваш вопрос, заданный много раз на SO, используйте поиск в следующий раз –

+0

Rails.root может быть вам интересен: http://stackoverflow.com/a/3724527/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 } 
Смежные вопросы