我在html erb中有这段代码片段。
对于某些对象,cover_image_url为空,当该属性为null或为空时,如何修改此代码块以使用默认值?
<%@books.each do |book|%>
$('#bookContainer').append('<div class="conn"><p><img class="floatright" src="<%= h book.cover_image_url%>"><h3><%= h book.title%></h3><h3><%= h book.author%></h3></p></div>');
<% end %>
答案 0 :(得分:15)
您可以在图书模型上定义一个cover_image_url
方法,如果数据库中没有设置任何内容,我将返回默认值(我假设cover_image_url是book表中的一列)。像这样:
class Book < ActiveRecord::Base
def cover_image_url
read_attribute(:cover_image_url).presence || "/my_default_link"
end
end
如果未设置属性,则返回"/my_default_link"
,如果设置了属性,则返回属性的值。有关此内容的更多信息,请参阅有关Rails 3 Way的第5.3节。在模型图层中为模型定义默认值可能比在视图图层中进行更清晰。
答案 1 :(得分:1)
您可以在循环中使用局部变量:
<% url = book.cover_image_url or "/my_default_link" %>
如果第一个值为nil,则将采用默认链接。
要检查null还是空:
<% url = ((book.cover_image_url.nil? or (book.cover_image_url and book.cover_image_url.empty?)) ? "/my_default_link" : book.cover_image_url) %>
把整个东西放在帮手里,使它更干净。