如何在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:dateitem:stringcategory: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'}

在指定比例和精度时要特别注意使用的单引号。