Ruby on Rails:通貨/お金を処理する最良の方法 から、次の足場をどのように生成しますか:
add_column :items, :price, :decimal, :precision => 8, :scale => 2
といった:
Rails generate scaffold LineItem name:string \
price:decimal {:precision => 8, :scale => 2}
また、10進型の「追加の説明」の正しい用語は何ですか?
での作業Rails 3.07、Ruby 1.92
In Rails 3.1以下では、構文は次のようになります。
Rails generate scaffold LineItem name:string price:decimal
次に、10進プロパティを移行ファイルに手動で追加します
t.decimal :price, :precision => 8, :scale => 2
In Rails 3.2では、10進数のプロパティを指定できます
Rails generate scaffold LineItem name price:decimal{8,2}
注:[〜#〜] zsh [〜#〜]を実行している場合、構文にはコンマではなくハイフンが必要です。
Rails generate scaffold LineItem name price:decimal{8-2}
別の注意:Mac OS X 10.9でbashを使用している場合は、コンマの代わりにドットを試してください
Rails generate scaffold LineItem name price:decimal{8.2}
数年後、Rails 4.2およびbash(Linux)を使用すると、次のジェネレータコマンドは問題なく機能します。
bin/Rails generate scaffold LineItem name:string price:decimal{8.2}
これにより、次の移行例が正しく生成されます。
class CreateLineItems < ActiveRecord::Migration
def change
create_table :line_items do |t|
t.string :name
t.decimal :price, precision: 8, scale: 2
t.timestamps null: false
end
end
end
ほぼ1年後。 Rails 3.2.11。通常のbashシェル。Rails scaffoldは構文で混乱を引き起こします field_name:decimal {p、s}railties公式ドキュメント に関係なく。混乱は、中括弧がbash(および他のシェル)のメタ文字であり、エスケープする必要があるという単純な事実にあります。スキャフォールドジェネレータリポジトリのlogged issue 4602 を参照してください。
Bashを使用している場合は、回避策としてコンマの代わりにドットを使用してください。
正しいスキャフォールド構文 field_name:decimal {p.s}
新しいアプローチ:
Add_columnだけで移行を作成します。例: Rails generate migration AddPriceToLineItem price:integer
次に、移行を編集し、希望どおりに変更します。
add_column :line_items, :price, :decimal, :precision => 8, :scale => 2
これを行うためにコマンドラインを正確に正しく取得することは、過去の私にとってフラストレーションと無駄な時間の主要な演習であることが証明されました。この手順に従って先に進むことをお勧めします。
これが私がそれをした方法です:
Rails generate scaffold LineItem ... amount:decimal ...
...
は、date:date
、item:string
、category:references
..など、スキャフォールドに必要なその他のフィールドです。
次に、移行を次のように変更しました。
create_table :line_items do |t|
.
.
.
t.decimal :amount, :precision => 8, :scale => 2
次に
rake db:migrate
これは、-999,999.99から999,999.99までの値を保持します。
ここにいくつかの(わずかに)有用なリファレンスがあります: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html
これは、Rails 5.x:の下でこれを行うための正確で最も簡単な方法です。
Rails generate scaffold LineItem name price:decimal{'8,2'}
スケールと精度を指定するときに使用される一重引用符に特に注意してください。