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 + (@product.current_loan.present? ? 1 : 0)
于 2013-07-17T10:44:05.717 に答える
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 (false) に変換され、2/2 は 1 (true) に変換されます。しかし、それは他の人にとって操作が少しトリッキーになります.

nil オブジェクトの object_id は 4 であるため、'present?' をキャンセルしようとしないでください。– あなたは間違った結果を得るでしょう :)

于 2013-07-17T22:20:31.980 に答える