rails 3.2 , ruby 1.9.3
アプリ内-1
整数に対して単純なアクションを実行しようとしています: モデルに対してこれを実行します:
order_details[:quantity].to_i - 1
そして取得ArgumentError: invalid radix -1
これをオンラインで検索しようとしましたが、ドキュメントはほとんど見つかりませんでした。
何か助けてください。
rails 3.2 , ruby 1.9.3
アプリ内-1
整数に対して単純なアクションを実行しようとしています: モデルに対してこれを実行します:
order_details[:quantity].to_i - 1
そして取得ArgumentError: invalid radix -1
これをオンラインで検索しようとしましたが、ドキュメントはほとんど見つかりませんでした。
何か助けてください。
私は(答えは関係なく同じですが)であると仮定してorder_details[:quantity]
いString
ます。
String#to_iは、数値が解釈される基数のオプションの引数を取ります。たとえば"10101".to_i(2)
、基数 2 として解析されます (21
結果として 10 進数が得られます)。あなたのコード行は次のように解釈されています
order_details[:quantity].to_i(-1)
負の 1 の基数 ( -1
) は意味をなさないため、そのエラーが発生します。order_details[:quantity].to_i
解決策は、最初に評価されるように括弧を付けることです。
(order_details[:quantity].to_i) - 1
編集: または、-
2 つの引数を区切るスペースがある (または両側にスペースがない) ことを確認してください。Ruby はそれを正しく解析する必要があります。実際のコードが( と の間にorder_details[:quantity].to_i -1
スペースがないことに注意してください)のように記述されている可能性があります。-
1
-1
to_i
あなたの問題は、コードが実際に次のようになっていることだと思います。
order_details[:quantity].to_i -1 # with the minus sign right next to the one
Ruby はこれを次のように解析しています。
order_details[:quantity].to_i(-1)
メソッドのパラメーターは (常に) Ruby では括弧で囲む必要はなく、to_i
カウントする基数を指定するパラメーターを取ります。
したがって、次のように、16 進数を通常の 10 進数に変換できます。
"0xA".to_i(16)
-
iamnotmaynard はそれを構文エラーとして正しく識別しましたが、とを分離する必要があると思います1
。最初の要素を括弧で囲むこともできます (機能します) が、それは適切な構文を提供するのではなく、不適切な構文を短縮することになります。
要素を括弧なしで区切ってみてください:
order_details[:quantity].to_i - 1 # with the space between the 1 and minus sign