Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails意外的tINTEGER,应为tSTRING_内容_Ruby On Rails_Scaffolding - Fatal编程技术网

Ruby on rails rails意外的tINTEGER,应为tSTRING_内容

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

我正在使用默认的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_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