Rails 3.1: динамическое связывание с изображениями в конвейере ресурсов? - PullRequest
4 голосов
/ 11 августа 2011

У меня есть ~ 500+ изображений флагов, которые я ранее хранил в public/images/flags/ и public/images/flags_small/.Для каждой страны в моей модели Country я сохраняю :iso_code, которое совпадает с именем соответствующего изображения флага.Например, mx.png - это название мексиканского флага, потому что mx - это двухбуквенный код ISO для Мексики.

Ранее у меня был вспомогательный метод, который возвращал бы html для отображения изображения на основе ISO-кода страны и того, нужен ли мне большой или маленький флаг.

С Rails 3.1, чтобы соответствовать конвейеру ресурсов, у меня сложилось впечатление, что эти изображения должны помещаться в папку app/assets/images.Исходя из этого:

  1. Можно ли сохранить вложенные папки в нем?
  2. Как использовать image_tag для отображения соответствующих изображений?

Редактировать: решение Ответ ниже был правильным, но я не хотел каждый раз набирать столько кода, поэтому я создал два вспомогательных метода:

  def flag(country)
    image_tag('/assets/flags/' + country.iso_code.downcase + '.png')
  end

  def small_flag(country)
    image_tag('/assets/flag_small/' + country.iso_code.downcase + '.png')
  end

Ответы [ 2 ]

8 голосов
/ 11 августа 2011
  1. Да, вы можете

  2. Например: <%= image_tag 'flags/uk.gif' %>

0 голосов
/ 10 мая 2018

В качестве быстрого решения для динамической загрузки изображений для Rails 5 (из ресурса, отличного от конвейера ресурсов), представьте, что у вас есть контроллер с именем car .

  1. добавьте новое действие (например, наше действие называется image ) в вашем контроллере;

    def image
       path = "C:/pics/.../test.jpg" # just a sample path to test
       send_file path, :content_type => 'image/jpg', :disposition => 'inline'
    end
    
  2. добавьте новый маршрут к вашему действию в route.rb;

    get '/img', to: "car#image"
    
  3. и, наконец, в своем файле ERB создайте тег изображения с помощью:

    <div>
        <%= image_tag url_for(:controller => "home", :action => "image") %>
    </div>
    

Это просто для проверки основ иВы можете сделать его параметризованным (загрузить изображение на основе идентификатора, имени и т. д.)

...