【问题标题】:Determining if image exists in Rails 2确定图像是否存在于 Rails 2 中
【发布时间】:2023-03-26 08:56:01
【问题描述】:

我正在尝试检查文件是否存在,以便我可以显示图像或占位符,但始终显示占位符。如果条件语句被删除,则徽标显示正常。

<% if File.exists?(Rails.root + '/public/images/portal/logos/' + @organisation_id + '.png') %>
  <img src="/images/portal/logos/<%= @organisation_id %>.png" alt="<%= @person.organisation.name %>">
<% else %>
  <img src="http://placehold.it/300x83&text=Please+upload+your+company+logo">
<% end %>

我已经阅读了一些问题,但大多数似乎都与 Rails 3 有关,但看到我没有收到任何错误,我认为这会起作用。

【问题讨论】:

  • Rails.root 在 Rails 2 中工作?可能是RAILS_ROOT
  • 刚刚尝试打印 Rails.root 并打印出正确的路径,所以我的图片网址很好,所以不知道为什么它没有捡起它。 RAILS_ROOT 打印相同的路径,但图像检查有效,很奇怪。如果您提交答案,我会将其标记为已接受

标签: ruby-on-rails ruby-on-rails-2


【解决方案1】:

Rails.root 在 Rails 2 中工作?可能是RAILS_ROOT

【讨论】:

    【解决方案2】:

    Rails.root 返回一个Pathname。向Pathname 添加绝对路径会删除Pathname 中的现有路径。

    即。

    Rails.root #=> #<Pathname:/foo/bar>
    Rails.root + "baz" #=> #<Pathname:/foo/bar/baz>
    Rails.root + "/baz" #=> #<Pathname:/baz>
    

    如果你这样做

    Rails.root + 'public/images/portal/logos/#{@organisation_id}.png'
    

    它应该工作。或者甚至更好:

    Rails.root.join("public/images/portal/logos", "#{@organisation_id.png')
    

    将此与返回 StringRAILS_ROOT 进行比较:

    RAILS_ROOT #=> "/foo/bar"
    RAILS_ROOT + "baz" #=> "/foo/barbaz"
    RAILS_ROOT + "/baz" #=> "/foo/bar/baz"
    

    【讨论】:

    • 感谢您的回答。如果我尝试您的建议,它仍然不起作用,可能是因为我在 Rails 2 上。省略最初的正斜杠对我来说似乎违反直觉,但我想这只是 Rails 的魔力。希望将来有人会从您的精彩解释中受益。
    猜你喜欢
    • 2012-08-25
    • 2011-10-10
    • 2015-06-22
    • 1970-01-01
    • 2013-03-22
    • 2018-07-29
    • 2010-09-30
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多