我有一个非常奇怪的案例,我发现我正在进行<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="outer">
<div id="inner">
<p id="content">Click Me</p>
</div>
</div>
测试。
执行RSpec
后,我可以执行my_model = MyModel.create
我将获得该对象的所有创建属性,但是当我执行my_model.inspect
或my_model.blank?
时分别显示为my_model.present?
和true
我可以通过
进一步证明这种奇怪的行为false
我得到相同的结果 - 可以检查对象,显示属性,但注册为空白而不存在。
真的很奇怪,我不能用这种行为写一个可靠的测试。怎么能这么明显地存在&#34;存在&#34;但是两者都是空白&#34;而不是&#34;现在&#34;?
以下代码显示了注释中的输出:
find_test = MyModel.find(my_model.id)
答案 0 :(得分:0)
def self.find_or_create(id, current_user)
cart = Cart.where(referral_guid: nil, id: id).first
if !priority_cart?(cart) && !current_user.nil?
cart = Cart.where(referral_guid: current_user.referral_guid).order("id DESC").first
end
cart.update_cart_with_referral_guid(current_user) unless current_user.nil?
cart = Cart.create unless cart
##### test 1 #####
puts("cart.inspect: #{cart.inspect}") #<Cart id: 2, created_at: "2015-06-13 17:39:57", updated_at: "2015-06-13 17:39:57", price_total: nil, tax: nil, referral_guid: nil>
puts("cart.present?: #{cart.present?}") #false
puts("cart.blank?: #{cart.blank?}") #true
##### test 2 #####
find_test = Cart.find(cart.id)
puts("find_test.inspect: #{find_test.inspect}") #<Cart id: 2, created_at: "2015-06-13 17:39:57", updated_at: "2015-06-13 17:39:57", price_total: nil, tax: nil, referral_guid: nil>
puts("find_test.present?: #{find_test.present?}") #false
puts("find_test.blank?: #{find_test.blank?}") #true
cart
end
答案 1 :(得分:0)
blank?
是一个Rails方法,定义如下:
def blank?
respond_to?(:empty?) ? !!empty? : !self
end
和present?
只是相反的。
换句话说,它在很大程度上取决于模型是否/如何响应empty?
方法。
你还没有提供Cart
类的定义,也许你正在使用一些框架,但假设这是某种形式的“购物车”,那么定义它是很自然的一个empty?
方法,只有当它包含“包含”项时才返回true
。由于您刚刚创建了购物车对象并且未在其中放置任何物品,因此它很自然会“空”。