使用image_tag从root渲染图像

时间:2015-12-18 09:33:30

标签: ruby-on-rails asset-pipeline

我的根目录中有一个文件夹&root; / tmp / database / *。JPG'我想用image_tag在我的视图中显示。

我目前的代码是:

<% @images.each do |image| %>
  <%= image_tag image.file, class: "img-responsive"  %>
<% end %>

但由于image_tag使用资产管道,因此将图像呈现为:

'/images/tmp/database/xotter-1.jpg'

所以我的问题是,我是否有可能使用image_tag并将图片呈现为:'/tmp/database/*.JPG'

2 个答案:

答案 0 :(得分:1)

您网站上提供的所有资产(图片,css,js等)都需要来自公共文件夹中的某个位置。但是,公用文件夹可以包含符号链接,也就是其他文件夹的快捷方式。

因此,例如,如果您想要提供<activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > 中的文件,您可以创建一个符号链接:

#{Rails.root}/tmp/database

您现在应该看到公共文件夹中包含#from your application folder cd public ln -s ../tmp/database database 文件夹,并且可以使用网址链接到其中的文件

database

对应

中的文件
"/database/xotter-1.jpg"

这些说明假设您使用bash样式的命令行shell,例如在linux或mac os中。如果您在Windows中,则可能需要以不同方式设置快捷方式。

编辑:关于在文件夹中显示所有图片的后续问题的答案。

假设您有一个文件夹#{Rails.root}/public/database/xotter-1.jpg ,并且您想要查找其中的所有jpg文件:您可以通过多种方式执行此操作。我喜欢#{Rails.root}/public/database,与Dir[]一起使用(这是一种生成文件路径的安全方式,可以解决额外/缺失的斜线,否则很容易出错)例如

File.join

请注意,这些路径都与运行命令的位置有关,在rails服务器或控制台的情况下,这些路径是rails应用程序文件夹。

如果你想链接到这些,你需要相对于公共文件夹的路径,你可以通过说

jpg_files = Dir[File.join("public/database", "*.jpg")]
=> ["public/database/foo.jpg", "public/database/bar.jpg"]

所以,要在你的模板中将它们结合在一起:

filename.gsub("public","")
=> "/database/foo.jpg"

答案 1 :(得分:0)

只需添加Max Williams'史诗般的答案,如果您使用图片填充public文件夹(而不是tmp),您就可以使用内置的asset_path helpers

  

计算公共目录中资产的路径

asset_path "database/xotter-1.jpg" #-> /public/assets/database/xotter-1.jpg"

我感谢这意味着您必须使用assets子目录,但这有充分的理由......

-

<强>预编译

就个人而言,我会将图片放入您应用的assets/images文件夹中。

您遇到的问题是,您的所有图片都会在您的公共文件夹中保持“裸露”状态,这会使它们对热链接开放,但也会阻止它们在资产管道中正常使用。

如果您将图片包含在assets/images/....中,那么当您进入制作时,您可以获得precompile图片:

rake assets:precompile RAILS_ENV=production

预编译无论如何都将所有资产放入/public文件夹......但更重要的是,fingerprints它们:

public/assets/images/database/xotter-1-[[fingerprint]].jpg

如果您拨打image_tag databsae/xotter-1.jpg,这些图片仍然可用,但这次他们会在正确的位置。

Rails中的所有路径都来自public目录,因此您可以使用相对路径直接引用public目录的链接:

image_tag 'database/xotter-1.jpg

不同之处在于,如果您将图片放入assets/images,它们就会包含在资产管道中,因此无论您运行应用的环境如何,都可以访问这些图片。