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

Sat*_*ish 13 ruby ruby-on-rails

我在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 %>
Run Code Online (Sandbox Code Playgroud)

jer*_*son 17

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
Run Code Online (Sandbox Code Playgroud)

"/my_default_link"如果未设置属性,则返回此属性,如果已设置,则返回属性的值.有关此内容的更多信息,请参阅有关Rails 3 Way的第5.3节.在模型图层中为模型定义默认值可能比在视图图层中进行更清晰.

  • 如果要将空白视为空值,可能需要将其更改为`read_attribute(:cover_image_url).presence || "/ my_default_link"`.如果对象不是空白,则`presence`返回该对象,否则返回nil. (2认同)