Ruby on rails rails意外的tINTEGER,应为tSTRING_内容
我正在使用默认的rails scaffold命令生成rails scaffold。但我在尝试迁移时遇到了以下错误:Ruby on rails rails意外的tINTEGER,应为tSTRING_内容,ruby-on-rails,scaffolding,Ruby On Rails,Scaffolding,我正在使用默认的rails scaffold命令生成rails scaffold。但我在尝试迁移时遇到了以下错误: 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_Product
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
在这个解决方案中,非常简单的转换如下:
t.float :2016-17
对这样的事情:
t.float :'2016-17'
2011-12 = 1999
所以我的问题是,如何从scaffold命令中以字符串形式传递值,正如您所看到的,我试图以字符串形式传递列名,但什么也没有发生。下面是我将如何做的
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\u AnnualStateDomesticProduct3
并编辑列,使其看起来像t.decimal:'2011-12'
然后运行rake db:migrate请试试这个
rails g scaffold Annual_State_Domestic_Product3 Sector:string :'2011-12':float :'2012-13':float :'2013-14':float
等等 运行
rails g脚手架年度国家国内产品3部门:字符串“2011-12”:浮动“2012-13”:浮动“2013-14”:浮动“2014-15”:浮动“2015-16”:浮动“2016-17”:浮动
之后,转到迁移文件并替换t、 浮动时间:2011-12 到
t、 float:“2011-12”ActiveRecord将您的字段名映射到ruby变量,并且您不允许在变量名中使用
-
,因为它是一个数学运算符,因此您的字段名2011-12
将被解释为如下数学表达式:
t.float :'2016-17'
2011-12 = 1999
因此出现了意外的tINTEGER
异常
为了避免这种情况,您可以使用下划线\uuu
代替-
,例如2011\u12
:
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
如果你检查一下你提到的类似问题,在第二个答案中,你会发现你会很好地解释了你目前的方法所面临的问题 需要指出的一个问题是,即使在您成功迁移为
t.string“2013-14”
之后,您也无法将2013-14
作为方法调用,因为ruby不支持以数字开头的方法
为了防止这些问题,我的建议是在运行迁移时命名属性date
或seasure