私は次のようなことをしたい:
@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 + (@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 (false) に変換され、2/2 は 1 (true) に変換されます。しかし、それは他の人にとって操作が少しトリッキーになります.
nil オブジェクトの object_id は 4 であるため、'present?' をキャンセルしようとしないでください。– あなたは間違った結果を得るでしょう :)