【问题标题】:Rendering images in a directory在目录中渲染图像
【发布时间】:2011-05-21 05:11:32
【问题描述】:

您好。我很确定有一种更清洁的方法可以做到这一点,但我找不到。

我有一个图标目录,用户可以选择包含在他们的内容中。我有一部分要创建图标调色板供他们选择:

<% @files = Dir['public/images/prompts/*.*'] %>
<input type="hidden" id="test_prompt_image" value="/images/prompts/default.png" />
<% @files.each do |f| %>
    <div onclick="$('#test_prompt_image').val('<%= f.gsub("public","") %>')" class="MultiColumn">
      <img src="<%= f.gsub("public","") %>"/>
    </div>
<% end %>

Dir 返回的结果包括服务器“public/images/...”上的完整相对路径,但我必须删除“public”才能找到图像的 src 路径。是否有使用而不是返回 URI 的 Dir 调用?我还搞砸了在目录路径中包含 RAILS_ROOT,但这只是给了我一个更长的文件路径来清理到请求路径中。

谢谢!

【问题讨论】:

    标签: ruby-on-rails image directory public


    【解决方案1】:

    顺便说一句,要按照 Rails 的方式(以及良好的架构)做事,请移步:

    @files = Dir['public/images/prompts/*.*'].map {|f| f.sub('public','') }
    

    ...离开视图并进入控制器。控制器是设置变量和进行数据存储访问的地方,视图是显示和格式化信息的地方。此外,我会通过为该路径创建一个常量来更多地重构它,例如在 environment.rb 中:

    ICON_DIRECTORY_PATH = 'public/images/prompts/'
    

    【讨论】:

    • 感谢您的额外建议。在我的问题的背景下获得这些提示和提醒对于像我这样刚接触框架的人来说非常有价值。
    【解决方案2】:

    当您获取文件列表时,只需删除公共...

    @files = Dir['public/images/prompts/*.*'].map {|f| f.sub('public','') }
    

    【讨论】:

    • 谢谢。这绝对比我在那里的更好。如果真的没有更清洁的方法,我会在一天结束时关闭它。
    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2018-04-21
    • 2021-09-07
    相关资源
    最近更新 更多