我正在尝试使用值设置变量。但在某些情况下,这个值将不存在。在场景中,我想将其设置为我构建的Null类。以下是我正在使用的内容:
coupon = rsvp.purchases.map(&:coupon) || NullCoupon.new
这条线我试图说 - if rsvp.purchases.coupons is nil assign coupon to NullCoupon.new
。我显然做错了什么,但我怎么能做到这一点?
ActionView::Template::Error (undefined method "coupon" for #<Purchase::ActiveRecord_Associations_CollectionProxy:0x007fadb410a478>
答案 0 :(得分:2)
修改强>
我现在从错误中看到问题不在于您的||
运算符,而是您的rsvp.purchases.map(&:coupon)
方法链接。它没有为其中一次购买找到coupon
。
您可以通过确保购买总是包含带有验证的优惠券来解决此问题,或者您可以使用Rails中的.try
方法。
<强>原始强>
在Ruby中,nil
和false
是唯一不真实的东西。所以,
优惠券将等于rsvp.purchases.map(&:coupon)
,除非rsvp.purchases.map(&:coupon)
等于nil
或false
。
您能否更具体一些,并举例说明您收到的错误?
以下示例:
irb(main):019:0> coupon = nil || 1
=> 1
irb(main):020:0> coupon = "" || 1
=> ""
irb(main):021:0> coupon = false || 1
=> 1
irb(main):022:0> coupon = 4 || 1
=> 4
irb(main):023:0> coupon = OpenStruct.new || 1
=> #<OpenStruct>
irb(main):024:0> coupon = false || OpenStruct.new
=> #<OpenStruct>
irb(main):025:0> coupon = nil || OpenStruct.new
=> #<OpenStruct>
答案 1 :(得分:2)
您可以获取优惠券数组的第一个元素,如果没有元素,则为零。
(这假设优惠券与购买之间存在多对一关系)
coupon = rsvp.purchases.coupons.first || NullCoupon.new