Ruby on Rails: использование значения по умолчанию, когда переменная равна null или пустой
У меня есть этот фрагмент кода в 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 %>
Ответы
Ответ 1
Вы можете определить метод cover_image_url
в своей книжной модели, который вернет значение по умолчанию, если в базе данных ничего не установлено (я предполагаю, что cover_image_url - столбец в таблице книг). Что-то вроде этого:
class Book < ActiveRecord::Base
def cover_image_url
read_attribute(:cover_image_url).presence || "/my_default_link"
end
end
Это вернет "/my_default_link"
, если атрибут не установлен, или значение атрибута, если оно установлено. См. Раздел 5.3 "The Rails 3 Way" для получения дополнительной информации об этом материале. Определение значения по умолчанию для модели на уровне модели может быть немного чище, чем делать это на уровне представления.
Ответ 2
Вы можете использовать локальную переменную внутри цикла:
<% 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) %>
Поместите все это в помощник, чтобы сделать его более чистым.