不接受图片路径?(注意:这是一个提问标题,不需要回答)

3
我有一个图片在我的app/assets/images/文件夹中,名为“Flower.jpg”。使用<%=image_tag("Flower.jpg")%>可以显示它,但我想用html来显示它。使用<img src="Flower.jpg">没有效果。
对于我的用户模型User,我也使用了Paperclip,在public/system/users/avatars/000/000中存储图片,并且User.avatar_file_name返回绝对文件路径,这种情况下是这样的:/system/users/avatars/000/000/157/thumb/Flower.jpg?1248273956。像这样将该路径插入到src中:<img src="<%=@user.avatar_file_name%>">可以显示图片。
我在我的rails控制台中找到了Flower.jpg的绝对路径:
> helper.image_tag("Flower.jpg")
=> "<img alt=\"Flower\" src=\"/assets/Flower.jpg\" />

但是,<img src="/assets/Flower.jpg\"> 不会显示,尽管 <img src="/system/users/avatars/000/000/157/thumb/Flower.jpg?1248273956"> 显示了。为什么呢?


1
为什么扩展名末尾有一个“\”? - Kritner
@Kritner 我不知道。那正是Rails控制台给我的输出。 - Jeff Caros
1个回答

5

image_tag助手将标准图像文件夹的路径添加到文件的路径前缀。在我的Rails版本中,这是“/images/”,因此:

<%=image_tag("Flower.jpg")%>

渲染为

<img src="/images/Flower.jpg">

与所有类似的资源路径一样,实际文件应相对于您的应用程序公共文件夹而言,即:

<RAILS ROOT>/public/images/Flower.jpg

在你所使用的 Rails 版本中,似乎默认路径为 /app/assets/images/,因此这个路径需要包含在你的代码中。
<%=image_tag("Flower.jpg")%>

被渲染为

<img src="/app/assets/images/Flower.jpg">

这指向了这个文件:

<RAILS ROOT>/public/app/assets/images/Flower.jpg

如果您进行
<img src="Flower.jpg">

如果您想手动编写代码而不使用助手,则需要指定文件路径,该文件应位于<RAILS ROOT/public文件夹中。例如,如果您的文件位于<RAILS ROOT>/public/Flower.jpg,则应在代码中指定该路径,否则标签将无法正常工作。

<img src="/app/assets/images/Flower.jpg">

顺便提一下,在你的HTML片段中,你将scr = "放入了其中,而不是src = ",这会使它更加损坏。

<img src="/app/assets/images/Flower.jpg"> 也没有任何作用。我认为它不应该指向 <RAILS ROOT>/public/app/assets/images/Flower.jpg。虽然我有一个 public 文件夹,但它与我的 app 文件夹是分开的。app 似乎在根目录中。 - Jeff Caros
相对于你的RAILS_ROOT文件夹,实际文件在哪里? - Max Williams
它需要放在你的RAILS_ROOT/public文件夹中的某个位置,但请记住,在预部署Rails时,可能会将文件从RAILS_ROOT/app/assets复制到RAILS_ROOT/public - Max Williams
那就是你的问题了。你的网站只能链接到公共文件夹中的资源:你无法在网页上访问RAILS_ROOT/app中的文件。就像我说的,当你进行资产预编译时,Rails会将这些文件从app/assets复制到public中,你需要链接到公共位置。 - Max Williams
哈哈,冷静点。我只是想在预编译之前找到一种使用我的图像的方法。我想看看在预编译之后我的视图会是什么样子。有没有一种方法可以链接到ROOT/app/assets中的图像,或者我必须在预编译之前才能看到我的图像长什么样? - Jeff Caros
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接