3

rails 3.2 , ruby 1.9.3アプリ内-1整数に対して単純なアクションを実行しようとしています: モデルに対してこれを実行します:

order_details[:quantity].to_i - 1

そして取得ArgumentError: invalid radix -1

これをオンラインで検索しようとしましたが、ドキュメントはほとんど見つかりませんでした。

何か助けてください。

4

2 に答える 2

8

私は(答えは関係なく同じですが)であると仮定して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-1to_i

于 2013-11-05T17:07:06.573 に答える
1

あなたの問題は、コードが実際に次のようになっていることだと思います。

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
于 2013-11-05T17:13:46.087 に答える