Ruby on Rails:使用默认值,当变量为null或为空时

时间:2011-07-07 18:45:37

标签: ruby-on-rails ruby

我在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 %>

2 个答案:

答案 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) %>

把整个东西放在帮手里,使它更干净。