Rails 4:如何使用发送来构建条件资产标记助手

时间:2015-03-31 00:01:47

标签: ruby-on-rails asset-pipeline

我想根据资产mime-types呈现资产标签助手,使用send来强制转换该文件类型:

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

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

1 个答案:

答案 0 :(得分:0)

我会帮助你处理这个逻辑,比如:

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 %>