如何在Rails 3中使用"额外描述"生成数据类型的脚手架?

B S*_*ven 22 activerecord ruby-on-rails scaffolding ruby-on-rails-3

Ruby on Rails:处理货币/货币的最佳方法,您如何为以下内容生成脚手架:

add_column :items, :price, :decimal, :precision => 8, :scale => 2
Run Code Online (Sandbox Code Playgroud)

如:

rails generate scaffold LineItem name:string \
                                 price:decimal {:precision => 8, :scale => 2}
Run Code Online (Sandbox Code Playgroud)

此外,十进制类型的"额外描述"的正确术语是什么?

使用Rails 3.07,Ruby 1.92

sca*_*er2 51

在Rails 3.1及更低版本中,语法是

rails generate scaffold LineItem name:string price:decimal
Run Code Online (Sandbox Code Playgroud)

然后手动将十进制属性添加到迁移文件

t.decimal :price, :precision => 8, :scale => 2
Run Code Online (Sandbox Code Playgroud)

在Rails 3.2中,可以指定小数属性

rails generate scaffold LineItem name price:decimal{8,2}
Run Code Online (Sandbox Code Playgroud)

注意:如果您正在运行ZSH,则语法需要连字符而不是逗号.

rails generate scaffold LineItem name price:decimal{8-2}
Run Code Online (Sandbox Code Playgroud)

另一个注意:如果您在Mac OS X 10.9下使用bash,请尝试使用点而不是逗号

rails generate scaffold LineItem name price:decimal{8.2}
Run Code Online (Sandbox Code Playgroud)

  • 建议的ZSH解决方法对我不起作用,我必须引用参数,即`rails generate scaffold LineItem name"price:decimal {8,2}"` (2认同)

rka*_*see 12

几年后,使用Rails 4.2和bash(Linux),以下生成器命令可以正常工作:

bin/rails generate scaffold LineItem name:string price:decimal{8.2}
Run Code Online (Sandbox Code Playgroud)

这将正确生成以下示例迁移:

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
Run Code Online (Sandbox Code Playgroud)


smi*_*-on 11

差不多一年之后.Rails 3.2.11.常规的bash shell.Rails脚手架创建了语法field_name:decimal {p,s}混乱,无论铁路官方文档如何.混淆的简单事实是,花括号是bash(以及其他shell)中的元字符,需要进行转义.请参阅脚手架生成器仓库中记录的问题4602.

如果您使用bash,则使用点而不是逗号作为解决方法.
正确的脚手架语法field_name:decimal {ps}

  • + 1十进制{18,2}在Rails4.0和bash中对我不起作用,这是正确的答案. (2认同)