我的要求是仅在我的@ order.display_total< $ 200 所以当我包含给定的代码时:
- if method.method_type == 'cashondelivery' && @order.display_total < $200
.form-buttons{"data-hook" => "buttons"}
= form.hidden_field :cod_pay, :value => true
= submit_tag "Order Now", :class => 'order-now btn btn-danger'
它给了我错误:
NoMethodError - undefined method `<' for #<Spree::Money:0x007ff3d9366490>:
其中@order获取此内容:
#<Spree::Order id: 5964, number: "R981938713", item_total: #<BigDecimal:7ff3d2514f78,'0.3843E3',18(18)>, total: #<BigDecimal:7ff3cea3bd20,'0.3843E3',18(18)>, state: "address", adjustment_total: #<BigDecimal:7ff3d25149b0,'0.0',9(18)>, user_id: 1, completed_at: nil, bill_address_id: 24481, ship_address_id: 24482, payment_total: #<BigDecimal:7ff3d25142f8,'0.0',9(18)>, shipping_method_id: nil, shipment_state: nil, payment_state: nil, email: "admin@skinnymint.com", special_instructions: nil, created_at: "2015-12-27 03:45:02", updated_at: "2015-12-28 12:30:34", currency: "USD", last_ip_address: "127.0.0.1", created_by_id: 1, shipment_total: #<BigDecimal:7ff3d251eb68,'0.0',9(18)>, additional_tax_total: #<BigDecimal:7ff3d251ea00,'0.0',9(18)>, promo_total: #<BigDecimal:7ff3d251e7d0,'0.0',9(18)>, channel: "spree", included_tax_total: #<BigDecimal:7ff3d251e5c8,'0.0',9(18)>, item_count: 7, approver_id: nil, approved_at: nil, confirmation_delivered: false, considered_risky: false, guest_token: "aGoCAkyLXJs1oOUp9dS96w", locale: nil, state_lock_version: 0, cod_pay: false>
和@ order.display_total = $ 398.40
请指导我如何放置条件,因为我是狂欢铁路的新手。提前谢谢。
答案 0 :(得分:3)
@ order.display_total返回没有比较的“money”对象。但是我注意到你的对象也有一个“item_total”字段,它似乎有数字值。所以@order.item_total < 200
会奏效。但是,这不会考虑货币转换等。
答案 1 :(得分:0)
不要使用$
。如果order.display_total
是一个字符串:强制转换为int / double / float,然后尝试使用&lt; 200
答案 2 :(得分:0)
您的条件是比较不同的类型。小于号只能用于比较数字。您需要将@ order.display_total转换为数字,然后从比较的右侧删除美元符号。
更好的方法是将该逻辑移动到辅助方法,从而使视图不受逻辑影响。
答案 3 :(得分:0)
我建议比较没有'$'的金额我不知道你如何存储金额,以便你可以直接比较数字,这是最容易使用的解决方案。 否则,创建一个提取数字并比较它们的简单方法:
def is_allowed?(amount,total)
nbr1 = amount[1..-1]
nbr2 = total[1..-1]
amount < total
end