刘华佼的全栈学习记录

5-11 present?是什么东东

| Comments

在dash上搜索present

出现了文档rails/activesupport/lib/active_support/core_ext/object/blank.rb

  def present?
    !blank?
  end

这句话的意思就是:blank?取反后就是present?,所以只要懂了blank?是什么东东,就懂了present?

所以,除了false,空值或者一个空白字符(串),例如:false, '', ' ', 或者nil,[], {}, 就是present,所以:

nil.blank? # => true
false.blank? # => true
true.blank? # => false
[].blank?      # => true
[1,2,3].blank? # => false
{}.blank?                # => true
{ key: 'value' }.blank?  # => false
''.blank?       # => true
'   '.blank?    # => true
"\t\n\r".blank? # => true
' blah '.blank? # => false
"\u00a0".blank? # => true
1.blank? # => false
0.blank? # => false
Time.now.blank? # => false

这里面的blank换成present后,后面得到的值就要取反,例如:

nil.blank?的值为true,那么nil.present?的值就为false;
true.blank?的值为false,那么true.present? 的值就为true

教材6-1 购物车练习作业 (解答)用到present?的是这一段:

app/views/products/show.html.erb
...(略)
    <div class="product-price"> ¥ <%= @product.price %> </div>

    <div class="pull-right">
+     <% if @product.quantity.present? && @product.quantity > 0 %>
        <%= link_to("加入购物车", add_to_cart_product_path(@product), method: :post,
                    class: "btn btn-lg btn-danger") %>
+     <% else %>
+       已销售一空,无法购买
+     <% end %>
    </div>
...(略)

即这三句:

+     <% if @product.quantity.present? && @product.quantity > 0 %>
        <%= link_to("加入购物车", add_to_cart_product_path(@product), method: :post,
                    class: "btn btn-lg btn-danger") %>
+     <% else %>
+       已销售一空,无法购买
+     <% end %>

它的意思是说,如果@product.quantity不为空,那么就显示"加入购物车"按钮。

因为@product.quantity不为空时,@product.quantity.present?的值为true,这时if语句才会继续往下执行
<%= link_to("加入购物车", add_to_cart_product_path(@product), method: :post, class: "btn btn-lg btn-danger") %>

@product.quantity为空时,@product.quantity.present?的值为false,这时就不会到if内部去,而跳到if的下一句<% else %>,显示“已销售一空,无法购买”。

Comments

comments powered by Disqus