4

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

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

对于 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
4

2 回答 2

8
  1. 是的你可以

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

于 2011-08-11T16:25:12.007 回答
0

作为为 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. 在 routes.rb 中将新路由添加到您的操作;

    get '/img', to: "car#image"
    
  3. 最后在您的 ERB 文件中,创建一个图像标签;

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

这只是为了测试基础知识,您可以将其参数化(根据 id、name 等加载图像)

于 2018-05-10T03:40:41.270 回答