【问题标题】: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 %>