如何在Rails 3中使用“额外描述”生成数据类型的脚手架?
从Ruby on Rails:处理货币/货币的最佳方法,您如何为以下内容生成脚手架:
add_column :items, :price, :decimal, :precision => 8, :scale => 2
如:
rails generate scaffold LineItem name:string \ price:decimal {:precision => 8, :scale => 2}
此外,十进制类型的“额外描述”的正确术语是什么?
使用Rails 3.07,Ruby 1.92
在Rails 3.1及更低版本中,语法是
rails generate scaffold LineItem name:string price:decimal
然后手动将十进制属性添加到迁移文件
t.decimal :price, :precision => 8, :scale => 2
在Rails 3.2中 ,可以指定小数属性
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 3.2.11。 常规的bash shell。 无论铁路官方文档如何,Rails脚手架都会产生语法field_name:decimal {p,s} 。 混淆在于一个简单的事实,花括号是bash(以及其他shell)中的元字符,需要进行转义。 请参阅脚手架生成器仓库中记录的问题4602 。
如果您使用bash,则使用点而不是逗号作为解决方法。
正确的脚手架语法field_name:decimal {ps}
几年后,使用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
新的方法:
使用add_column创建迁移,例如rails generate migration AddPriceToLineItem price:integer
然后编辑迁移并将其更改为您想要的方式,例如
add_column :line_items, :price, :decimal, :precision => 8, :scale => 2
让命令行完全正确地执行此操作已被certificate是过去沮丧和浪费时间的主要练习。 我建议你按照这个程序继续前进。
我是这样做的:
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'}
在指定比例和精度时要特别注意使用的单引号。