我想做类似的事情:
@count = @product.possible_loans.count + @product.current_loan.present?
但是present
不是整数,它是布尔值。
如何将true转换为1,将false转换为0?
答案 0 :(得分:2)
你可以简单地使用Ruby的三元运算符,就像这样
@product.current_loan.present? ? 1 : 0
因此,在您的情况下
@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)
答案 1 :(得分:1)
试试这个
@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)
答案 2 :(得分:1)
你让这变得复杂。
@count = @product.possible_loans.count
@count += 1 if @product.current_loan.present?
这更具可读性。
答案 3 :(得分:1)
davidb给出的答案似乎对人类来说最具可读性,但是如果你想要将true或false转换为1或0,你可以利用Ruby中'true'对象的object_id是2和'false'object_id是0.所以
@count = @product.possible_loans.count+@product.current_loan.present?.object_id/2
将按您的意愿工作:0/2将转换为0(假)和2/2转换为1(真)。但这会让其他人的操作变得有点棘手。
注意nil对象有object_id 4,所以不要试图取消'present?' - 你会得到错误的结果:)