【问题标题】:Rails 4: How to Use Send to Build Conditional Asset Tag HelpersRails 4:如何使用 Send 构建条件资产标签助手
【发布时间】:2015-03-31 00:01:47
【问题描述】:

我想根据资产 mime 类型呈现资产标签助手,使用 send 像这样转换该文件类型:

<% if @cloud_file.filetype.match(/^(audio|image|video)$/) %>
  <%= send("#{@cloud_file.filetype}_tag") @cloud_file.url %>
<% end %>

遗憾的是,Rails 似乎无法使用这种方法并返回语法错误!任何人都知道此代码有什么问题或如何根据资产类型构建标签助手?

【问题讨论】:

    标签: ruby-on-rails asset-pipeline


    【解决方案1】:

    我会为你做一个处理这个逻辑的助手,比如:

    def build_tag(file)
      case file.filetype
       when 'audio'
         content_tag(:div ...)
       when 'image'
         content_tag(:img ...)
       when 'audio'
         content_tag(:div, class: audio ...)
      end
    end
    

    然后在您看来只需调用

    <% if @cloud_file.filetype.match(/^(audio|image|video)$/) %>
      <%= build_tag(@cloud_file) %>
    <% end %>
    

    您甚至可以稍微清理一下并添加一个方法来检查您的 @cloud_file 类的文件类型:

    def is_embeddable?
      filetype.match(/^(audio|image|video)$/)
    end
    

    所以你的最终代码看起来像:

    <% if @cloud_file.is_embeddable? %>
      <%= build_tag(@cloud_file) %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      相关资源
      最近更新 更多