我正在尝试检查用户的总和链接是否为img。如果是的话我想把它放在一个img标签中。这是我第一次使用Ruby on rails或Ruby。
<% if link.url.include? ".jpg" %>
<div class="img_wrapper"><img src="<%= link.url %>"></img></div>
<% elsif link.url.include? ".png" %>
<div class="img_wrapper"><img src="<%= link.url %>"></img></div>
<% elsif link.url.include? ".gif" %>
<div class="img_wrapper"><img src="<%= link.url %>"></img></div>
<% else %>
<div class="img_wrapper"><img src="../assets/no_image.png"></img></div>
<% end %>
答案 0 :(得分:2)
我认为像这样的逻辑属于模型,因为这样可以更容易地进行测试和重用:
# in app/models/link.rb
def image?
%w( .gif .jpg .png ).include?(File.extname(url))
end
# in the view
<% if link.image? %>
<div class="img_wrapper"><img src="<%= link.url %>"></img></div>
<% else %>
<div class="img_wrapper"><img src="../assets/no_image.png"></img></div>
<% end %>
甚至更短(您可能希望花费文件扩展名列表(例如bmp
,jpeg
或tiff
)):
# in app/models/link.rb
def image_url
%w( .gif .jpg .png ).include?(File.extname(url)) ? url : 'no_image.png'
end
# in the view
<div class="img_wrapper"><%= image_tag(link.image_url) %></div>
image_tag
版本将使用asset pipeline。
答案 1 :(得分:1)
<% img_src = %w(.jpg .png .gif).any? {|e| link.url.include?(e)} ? link.url : "../assets/no_image.png"%>
<div class="img_wrapper"><img src= <%= img_src %> ></img></div>
答案 2 :(得分:1)
由于大多数条件相同,您可以将其减少为单一条件:
<% if [".jpg", ".png", ".gif"].any? { |ext| link.url.ends_with?(ext) %>
<div class="img_wrapper"><img src="<%= link.url %>"></img></div>
<% else %>
<div class="img_wrapper"><img src="../assets/no_image.png"></img></div>
<% end %>
注意我正在使用String#ends_with?来自ActiveSupport,默认情况下包含在Rails中。
使用Regex进行扩展检查可能更有效:
<% if link.url =~ /.+(\.gif|\.jpg|\.png)$/ %>
<div class="img_wrapper"><img src="<%= link.url %>"></img></div>
<% else %>
<div class="img_wrapper"><img src="../assets/no_image.png"></img></div>
<% end %>
解释正则表达式:
//
中,它将其定义为正则表达式.+
匹配任意数量的字符(\.gif|\.jpg|\.png)
匹配任何扩展程序。$
匹配字符串的结尾。所以,用简单的英语:匹配一个字符串,如果它有任意数量的字符后跟一个匹配的扩展名,后跟字符串的结尾。
如果您愿意,可以将其重构为2行:
<% image_url = link.url =~ /.+(\.gif|\.jpg|\.png)$/ ? link.url : "../assets/no_image.png" %>
<div class="img_wrapper"><img src="<%= image_url %>"></img></div>