会意外地出现tINTEGER,预计会达到tSTRING_CONTENT

时间:2018-08-23 06:35:28

标签: ruby-on-rails scaffolding

我正在使用默认的rails scaffold命令生成Rails脚手架。但是在尝试迁移时出现此错误:

 syntax error, unexpected tINTEGER, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
  t.float :2011-12

要生成支架,我正在使用以下代码:

 rails g scaffold Annual_State_Domestic_Product3  Sector:string '2011-12':float '2012-13':float '2013-14':float '2014-15':float '2015-16':float '2016-17':float 

Similar answer on stack在此解决方案中非常简单,将其转换为:

 t.float :2016-17

像这样:

t.float :'2016-17'

所以我的问题是如何从脚手架命令中将值作为字符串传递,就像您看到的那样,我试图将列名作为字符串传递但什么也没发生。

5 个答案:

答案 0 :(得分:0)

这就是我要怎么做

rails g migration AnnualStateDomesticProduct3 Sector:string '2011-12':float '2012-13':float '2013-14':float '2014-15':float '2015-16':float '2016-17':float

在运行rake db:migrate之前,打开迁移文件timestamp_AnnualStateDomesticProduct3并编辑各列,使其看起来像t.decimal :'2011-12'

然后运行rake db:migrate

答案 1 :(得分:0)

请尝试这个

rails g scaffold Annual_State_Domestic_Product3 Sector:string :'2011-12':float :'2012-13':float :'2013-14':float

等等。

答案 2 :(得分:0)

运行  rails g scaffold Annual_State_Domestic_Product3扇区:字符串'2011-12':float'2012-13':float'2013-14':float'2014-15':float'2015-16':float'2016-17':float < / p>

之后,转到迁移文件并替换
 t.float:2011-12

t.float:“ 2011-12”

答案 3 :(得分:0)

ActiveRecord将您的字段名称映射到ruby变量,并且您不允许在变量名称中使用-,因为它是数学运算符,因此您的字段名称2011-12将被解释为数学表达式像这样:

2011-12 = 1999

出现unexpected tINTEGER异常。

为避免这种情况,您可以使用下划线_代替-,例如2011_12

rails g scaffold Annual_State_Domestic_Product3  Sector:string '2011_12':float '2012_13':float '2013_14':float '2014_15':float '2015_16':float '2016_17':float 

答案 4 :(得分:0)

如果您检查与您提到的SO相关的类似问题,那么在第二个答案中,您会很好地解释了当前方法所面临的问题。

要指出一个问题,即使在迁移成功为t.string "2013-14"之后,您也无法调用2013-14作为方法,因为ruby不支持以数字开头的方法。

为了防止这些问题,我的建议是在运行迁移时将属性命名为dateseason