如何将对象存在转换为整数



我想做一些类似的事情:

@count = @product.possible_loans.count + @product.current_loan.present?

但是present不是一个整数,它是一个布尔值。

如何将true转换为1,将false转换为0?

您可以简单地使用Ruby的三元运算符,就像一样

@product.current_loan.present? ? 1 : 0

因此,在您的情况下,

@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)

试试这个

@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)

你把这件事搞得很复杂。

@count = @product.possible_loans.count
@count += 1 if @product.current_loan.present?

这更可读。

davidb给出的答案似乎对人类来说是最可读的,但如果你想准确地将true或false转换为1或0,你可以利用Ruby中'true'对象的object_id是2,'false'对象_id是0这一事实。所以

@count = @product.possible_loans.count+@product.current_loan.present?.object_id/2

将按您的意愿工作:0/2将转换为0(false),2/2将转换成1(true)。但这会让其他人的操作变得有点棘手。

请注意,nil对象的object_id为4,因此不要尝试取消"present?"–你会得到错误的结果:)

最新更新