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 %>
我想根据资产 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 %>