Rails 3.1:动态链接到资产管道中的图像?

时间:2011-08-11 14:36:35

标签: image ruby-on-rails-3.1 asset-pipeline

我之前在public/images/flags/public/images/flags_small/保留了500多张国旗图片。对于我的国家/地区模型中的每个国家/地区,我存储:iso_code,它与对应的标志图像的名称相同。例如,mx.png是墨西哥旗的名称,因为mx是墨西哥的双字母ISO代码。

我以前有一个帮助方法会返回html,根据国家的iso代码显示图像,以及我是否想要大或小的标记。

使用Rails 3.1,为了符合资产管道,我的印象是这些图像应该进入app/assets/images文件夹。以下是:

  1. 我可以在其中维护子文件夹吗?
  2. 如何使用image_tag显示合适的图像?
  3. 编辑:解决方案 下面的答案是正确的,但我不想每次都输入那么多代码,所以我创建了两个辅助方法:

      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 个答案:

答案 0 :(得分:8)

  1. 是的,你可以

  2. 例如:<%= image_tag 'flags/uk.gif' %>

答案 1 :(得分:0)

作为为Rails 5(来自资源管道以外的资源)动态加载图像的快速解决方案,假设您有一个名为 car 的控制器。

  1. 在您的控制器中添加新动作(例如我们的动作称为图像);

    def image
       path = "C:/pics/.../test.jpg" # just a sample path to test
       send_file path, :content_type => 'image/jpg', :disposition => 'inline'
    end
    
  2. 将新路线添加到routes.rb;

    中的操作
    get '/img', to: "car#image"
    
  3. 最后在您的ERB文件中,使用;

    创建一个图像标记
    <div>
        <%= image_tag url_for(:controller => "home", :action => "image") %>
    </div>
    
  4. 这只是为了测试基础知识,你可以让它参数化(根据id,名称等加载图像)