我想做类似的事情:
@count = @product.possible_loans.count + @product.current_loan.present?
但present
不是整数,而是布尔值。
如何将 true 转换为 1 并将 false 转换为 0 ?
我想做类似的事情:
@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
@count += 1 if @product.current_loan.present?
这更具可读性。
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,因此不要尝试取消“存在?” – 你会得到错误的结果 :)
尝试这个
@count = @product.possible_loans.count + (@product.current_loan.present? ? 1 : 0)