Rails 4:如何使用 Send 构建条件资产标签助手

Rails 4: How to Use Send to Build Conditional Asset Tag Helpers

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

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

可悲的是,Rails 这种方法似乎不可行,returns 语法错误!任何人都知道这段代码有什么问题或如何根据资产类型构建标签助手?

我会制作一个帮手来为您处理此逻辑,例如:

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 class:

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

因此您的最终代码如下所示:

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