1

我想做类似的事情:

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

present不是整数,而是布尔值。

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

4

4 回答 4

2

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

@product.current_loan.present? ? 1 : 0

因此,在你的情况下

@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)
于 2013-07-17T10:42:56.483 回答
1

你让这变得复杂。

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

这更具可读性。

于 2013-07-17T10:47:02.160 回答
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,因此不要尝试取消“存在?” – 你会得到错误的结果 :)

于 2013-07-17T22:20:31.980 回答
1

尝试这个

@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)
于 2013-07-17T10:44:05.717 回答